Class BaseInstanceRenderData
- All Implemented Interfaces:
InstanceRenderAPI,RenderDataAPI
- Direct Known Subclasses:
BaseIlluminantData,BaseMIRenderData,DistortionEntity,FlareEntity
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected List<InstanceDataAPI>protected intprotected intprotected intprotected intprotected intprotected floatprotected booleanprotected MemoryBlockprotected final boolean[]Fields inherited from class org.boxutil.base.BaseRenderData
autoSubmitDataBuffer, autoSubmitModelMat, autoSubmitPrimeMat, blendConfig, blendState, controlData, customData, globalTimer, hasDelete, isTimerPaused, layer, modelMatBuffer, modelMatrix, primeMatBuffer, primeMatrix, primeMatrixState, statePackageBuffer, sync_lock, timingWhenPaused -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void_packingInstanceData(ByteBuffer rawBuffer, int offset, InstanceType type, int index, int limit, boolean isFixed) byteaddInstanceData(InstanceDataAPI instanceData) Have size limitBoxConfigs.getMaxInstanceDataSize().voidcallRefreshInstanceData(boolean refresh) When changed the instance data(Not fixed instance data), call it.voidcopyInstanceTimerOverride(InstanceRenderAPI renderData) voiddelete()byteintintintfloatintintintvoidglDraw()booleanbooleanbooleanDefault value isfalse.booleanvoidmallocInstance(InstanceType target, int dataNum) Make sure call it before callInstanceRenderAPI.submitInstance()when without valid memory.voidWhen call it, will reset data and delete related objects.protected voidprotected voidvoidvoidresetMemory(MemoryBlock memory) Unsafe operation.voidsetAlwaysRefreshInstanceData(boolean refresh) bytesetInstanceData(List<InstanceDataAPI> instanceData) For rendering a lots of entities (such as 10k+ entities) at once.bytesetInstanceData(List<InstanceDataAPI> instanceData, float fadeIn, float full, float fadeOut) Reset global timer by manual.voidvoidsetInstanceDataRefreshIndex(int index) voidsetInstanceDataRefreshOffset(int targetIndex) voidsetInstanceDataRefreshSize(int size) voidsetInstanceTimerOverride(float alpha, byte state) Override timer of all in-vRAM instance data to this value.voidsetMappingInstanceSubmit(boolean mappingMode) NOTE: Ineffective if device was OpenGL 4.4+ supported, will force updating to persistent mapping buffer.voidvoidsetRenderingCount(int num) voidsetRenderingOffset(int index) Should reset the rendering count after that.voidsetSharedInstanceData(InstanceRenderAPI renderData) Will always computes once for the same memory range.voidUse it when you changed the instance data.Methods inherited from class org.boxutil.base.BaseRenderData
_deleteExc, _resetExc, _StatePackageStack, advanceGlobalTimer, appendToEntity, appendToEntity, appendToEntity, appendToEntity, entityType, getBlendAlphaDST, getBlendAlphaSRC, getBlendColorDST, getBlendColorSRC, getBlendEquation, getBlendState, getCampaignLayer, getCombatLayer, getControlData, getCustomData, getGlobalTimer, getGlobalTimerAlpha, getLayer, getModelMatrix, getModelMatrixBuffer, getPrimeMatrix, getPrimeMatrixBuffer, getPrimeMatrixState, hasDelete, initIdentityModelMatrix, initIdentityPrimeMatrix, isAutoSubmitEntityData, isAutoSubmitModelMatrix, isAutoSubmitPrimeMatrix, isGlobalTimerOnce, isGlobalTimerOver, isTimerPaused, isTimingWhenPaused, pickDataPackage_vec4, pickModelMatrixPackage_mat4, pickPrimeMatrixPackage_mat4, reset, setAdditiveBlend, setAutoSubmitEntityData, setAutoSubmitModelMatrix, setAutoSubmitPrimeMatrix, setBlendEquation, setBlendFunc, setBlendFuncSeparate, setControlData, setCustomData, setCustomPrimeMatrix, setDefaultCampaignLayer, setDefaultCombatLayer, setDisableBlend, setFacingScale, setGlobalTimer, setGlobalTimerOnce, setLayer, setLocation, setLocation, setLocation, setLocation, setModelMatrix, setNegativeBlend, setNonePrimeMatrix, setNormalBlend, setPerspectivePrimeMatrix, setPrimeMatrix, setRotateScale, setStateVanilla, setStateVanilla, setTimerPaused, setTimingWhenPaused, setVanillaPrimeMatrix, submitEntityData, submitModelMatrix, submitPrimeMatrix
-
Field Details
-
instanceRefreshIndex
protected int instanceRefreshIndex -
instanceRefreshOffset
protected int instanceRefreshOffset -
instanceRefreshSize
protected int instanceRefreshSize -
instanceRenderingCount
protected int instanceRenderingCount -
instanceRenderingOffset
protected int instanceRenderingOffset -
instanceTimerOverride
protected float instanceTimerOverride -
memory
-
needRefreshInstanceData
protected final boolean[] needRefreshInstanceData -
mappingSubmit
protected boolean mappingSubmit -
instanceData
-
-
Constructor Details
-
BaseInstanceRenderData
public BaseInstanceRenderData()
-
-
Method Details
-
delete
public void delete()- Specified by:
deletein interfaceRenderDataAPI- Overrides:
deletein classBaseRenderData
-
glDraw
public void glDraw()- Specified by:
glDrawin interfaceRenderDataAPI- Overrides:
glDrawin classBaseRenderData
-
resetInstanceDataResource
protected void resetInstanceDataResource() -
resetInstanceDataClient
protected void resetInstanceDataClient() -
resetInstanceData
public void resetInstanceData()When call it, will reset data and delete related objects.A.K.A.
free()for instance data resources.- Specified by:
resetInstanceDatain interfaceInstanceRenderAPI
-
getInstanceData
- Specified by:
getInstanceDatain interfaceInstanceRenderAPI
-
setInstanceData
For rendering a lots of entities (such as 10k+ entities) at once.For all render objects, location/facing/size/color/emissive/alpha data all form
InstanceDataAPI, and overlay toRenderDataAPIimplements.Render count decided by
List.size().Have size limit, pick smallest from
BoxConfigs.getMaxInstanceDataSize().This entity attribute,
MaterialData.getColor()andMaterialData.getEmissiveColor()both apply to each instance when rendering.For model matrix, each instance is also derived from this entity.
- Specified by:
setInstanceDatain interfaceInstanceRenderAPI- Parameters:
instanceData- set to 'null' or empty 'List' -> clear, or a 'List' what isn't empty.- Returns:
- returns
BoxEnum.STATE_SUCCESSwhen success, returnBoxEnum.STATE_SUCCESSwhen null list that set to empty list.
-
setInstanceData
public byte setInstanceData(@Nullable List<InstanceDataAPI> instanceData, float fadeIn, float full, float fadeOut) Reset global timer by manual.Similar to
setInstanceData(List).- Specified by:
setInstanceDatain interfaceInstanceRenderAPI- Returns:
- returns
BoxEnum.STATE_SUCCESSwhen success, returnBoxEnum.STATE_FAILEDwhen null list that set to empty list.
-
addInstanceData
Have size limitBoxConfigs.getMaxInstanceDataSize().- Specified by:
addInstanceDatain interfaceInstanceRenderAPI- Returns:
- returns
BoxEnum.STATE_SUCCESSwhen success, returnBoxEnum.STATE_FAILEDwhen over limit.
-
_packingInstanceData
protected void _packingInstanceData(ByteBuffer rawBuffer, int offset, InstanceType type, int index, int limit, boolean isFixed) -
submitInstance
public void submitInstance()Description copied from interface:InstanceRenderAPIUse it when you changed the instance data.Should have reserved size for it, memory expand is an expensive operation.
Make sure has call
InstanceRenderAPI.mallocInstance(InstanceType, int)when without valid memory.- Specified by:
submitInstancein interfaceInstanceRenderAPI
-
mallocInstance
Description copied from interface:InstanceRenderAPIMake sure call it before callInstanceRenderAPI.submitInstance()when without valid memory.- Specified by:
mallocInstancein interfaceInstanceRenderAPI
-
isMappingInstanceSubmit
public boolean isMappingInstanceSubmit()Default value isfalse.- Specified by:
isMappingInstanceSubmitin interfaceInstanceRenderAPI
-
setMappingInstanceSubmit
public void setMappingInstanceSubmit(boolean mappingMode) NOTE: Ineffective if device was OpenGL 4.4+ supported, will force updating to persistent mapping buffer.For some very slight data, use
glBufferSubData()may faster.Besides, some devices(some ARM SoC) may slower with
glMapBufferRange(), decided by the drive how implements it.- Specified by:
setMappingInstanceSubmitin interfaceInstanceRenderAPI- Parameters:
mappingMode- to controls whether submit useglMapBufferRange(), else useglBufferSubData().
-
isNeedRefreshInstanceData
public boolean isNeedRefreshInstanceData()- Specified by:
isNeedRefreshInstanceDatain interfaceInstanceRenderAPI
-
isAlwaysRefreshInstanceData
public boolean isAlwaysRefreshInstanceData()- Specified by:
isAlwaysRefreshInstanceDatain interfaceInstanceRenderAPI
-
callRefreshInstanceData
public void callRefreshInstanceData(boolean refresh) When changed the instance data(Not fixed instance data), call it.- Specified by:
callRefreshInstanceDatain interfaceInstanceRenderAPI
-
setAlwaysRefreshInstanceData
public void setAlwaysRefreshInstanceData(boolean refresh) - Specified by:
setAlwaysRefreshInstanceDatain interfaceInstanceRenderAPI
-
haveValidInstanceData
public boolean haveValidInstanceData()- Specified by:
haveValidInstanceDatain interfaceInstanceRenderAPI
-
getValidInstanceDataCount
public int getValidInstanceDataCount()- Specified by:
getValidInstanceDataCountin interfaceInstanceRenderAPI
-
getInstanceDataRefreshIndex
public int getInstanceDataRefreshIndex()- Specified by:
getInstanceDataRefreshIndexin interfaceInstanceRenderAPI
-
getInstanceDataRefreshOffset
public int getInstanceDataRefreshOffset()- Specified by:
getInstanceDataRefreshOffsetin interfaceInstanceRenderAPI
-
getInstanceDataRefreshSize
public int getInstanceDataRefreshSize()- Specified by:
getInstanceDataRefreshSizein interfaceInstanceRenderAPI
-
setInstanceDataRefreshIndex
public void setInstanceDataRefreshIndex(int index) - Specified by:
setInstanceDataRefreshIndexin interfaceInstanceRenderAPI- Parameters:
index- will refresh instance data start from this index.
-
setInstanceDataRefreshOffset
public void setInstanceDataRefreshOffset(int targetIndex) - Specified by:
setInstanceDataRefreshOffsetin interfaceInstanceRenderAPI- Parameters:
targetIndex- will refresh instance data to instance data index of memory.
-
setInstanceDataRefreshSize
public void setInstanceDataRefreshSize(int size) - Specified by:
setInstanceDataRefreshSizein interfaceInstanceRenderAPI- Parameters:
size- Will refresh instance data count.
-
setInstanceDataRefreshAllFromCurrentIndex
public void setInstanceDataRefreshAllFromCurrentIndex()- Specified by:
setInstanceDataRefreshAllFromCurrentIndexin interfaceInstanceRenderAPI
-
getRenderingCount
public int getRenderingCount()- Specified by:
getRenderingCountin interfaceInstanceRenderAPI
-
setRenderingCount
public void setRenderingCount(int num) - Specified by:
setRenderingCountin interfaceInstanceRenderAPI
-
getRenderingOffset
public int getRenderingOffset()- Specified by:
getRenderingOffsetin interfaceInstanceRenderAPI
-
setRenderingOffset
public void setRenderingOffset(int index) Should reset the rendering count after that.- Specified by:
setRenderingOffsetin interfaceInstanceRenderAPI
-
setRenderingAllInstanceFromCurrentOffset
public void setRenderingAllInstanceFromCurrentOffset()- Specified by:
setRenderingAllInstanceFromCurrentOffsetin interfaceInstanceRenderAPI
-
getInstanceDataMemory
- Specified by:
getInstanceDataMemoryin interfaceInstanceRenderAPI
-
resetMemory
Unsafe operation.Equivalent to:
MemoryBlock old_mem = this.memory; if (old_mem) free(old_mem); this.memory = new_mem;- Specified by:
resetMemoryin interfaceInstanceRenderAPI
-
resetMemory
public void resetMemory()- Specified by:
resetMemoryin interfaceInstanceRenderAPI
-
getInstanceTimerOverride
public float getInstanceTimerOverride()- Specified by:
getInstanceTimerOverridein interfaceInstanceRenderAPI
-
setInstanceTimerOverride
public void setInstanceTimerOverride(float alpha, byte state) Override timer of all in-vRAM instance data to this value.- Specified by:
setInstanceTimerOverridein interfaceInstanceRenderAPI- Parameters:
alpha- set less than 0 to disable override.state- valid state:BoxEnum.TIMER_IN,BoxEnum.TIMER_FULL,BoxEnum.TIMER_OUT.
-
copyInstanceTimerOverride
- Specified by:
copyInstanceTimerOverridein interfaceInstanceRenderAPI
-
getGlobalTimerState
public byte getGlobalTimerState()- Specified by:
getGlobalTimerStatein interfaceRenderDataAPI- Overrides:
getGlobalTimerStatein classBaseRenderData
-