📄 indexedgeometryarrayretained.java
字号:
// System.err.println("by-copy"); synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { // update the alpha values retVal = updateAlphaInVertexData(cv, screen, alpha); useAlpha = (retVal[0] == Boolean.TRUE); vdata = (float[])retVal[1]; // D3D only if (alpha != lastScreenAlpha) { // handle multiple screen case lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { vdata = vertexData; // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } // geomLock is get in MasterControl when // RenderBin render the geometry. So it is safe // just to set the dirty flag here dirtyFlag = 0; } Pipeline.getPipeline().executeIndexedGeometry(cv.ctx, this, geoType, isNonUniformScale, useAlpha, ignoreVertexColors, initialIndexIndex, validIndexCount, // Vertex Count is maxCoordIndex + 1 maxCoordIndex + 1, ((vertexFormat & GeometryArray.COLOR) != 0)?(vertexFormat|GeometryArray.COLOR_4):vertexFormat, vertexAttrCount, vertexAttrSizes, texCoordSetCount, texCoordSetMap, (texCoordSetMap == null) ? 0 : texCoordSetMap.length, texCoordSetMapOffset, cv.numActiveTexUnit, vdata, null, cdirty, indexCoord); } // end of non by reference else if ((vertexFormat & GeometryArray.INTERLEAVED) != 0) { if(interLeavedVertexData == null) return; float[] cdata = null; synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { // update the alpha values retVal = updateAlphaInInterLeavedData(cv, screen, alpha); useAlpha = (retVal[0] == Boolean.TRUE); cdata = (float[])retVal[1]; if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } Pipeline.getPipeline().executeIndexedGeometry(cv.ctx, this, geoType, isNonUniformScale, useAlpha, ignoreVertexColors, initialIndexIndex, validIndexCount, maxCoordIndex + 1, vertexFormat, vertexAttrCount, vertexAttrSizes, texCoordSetCount, texCoordSetMap, (texCoordSetMap == null) ? 0 : texCoordSetMap.length, texCoordSetMapOffset, cv.numActiveTexUnit, interLeavedVertexData, cdata, cdirty, indexCoord); } //end of interleaved else { // Check if a vertexformat is set, but the array is null // if yes, don't draw anything if ((vertexType == 0) || ((vertexType & VERTEX_DEFINED) == 0) || (((vertexFormat & GeometryArray.COLOR) != 0) && (vertexType & COLOR_DEFINED) == 0) || (((vertexFormat & GeometryArray.NORMALS) != 0) && (vertexType & NORMAL_DEFINED) == 0) || (((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) && (vertexType & VATTR_DEFINED) == 0) || (((vertexFormat& GeometryArray.TEXTURE_COORDINATE) != 0) && (vertexType & TEXCOORD_DEFINED) == 0)) { return; } else { byte[] cbdata = null; float[] cfdata = null; if ((vertexType & (CF | C3F | C4F )) != 0) { synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { cfdata = updateAlphaInFloatRefColors(cv, screen, alpha); if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { cfdata = mirrorFloatRefColors[0]; // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } } else if ((vertexType & (CUB| C3UB | C4UB)) != 0) { synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { cbdata = updateAlphaInByteRefColors( cv, screen, alpha); if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { cbdata = mirrorUnsignedByteRefColors[0]; // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } } else { cdirty = dirtyFlag; } int vdefined = 0; if((vertexType & (PF | P3F)) != 0) vdefined |= COORD_FLOAT; if((vertexType & (PD | P3D)) != 0) vdefined |= COORD_DOUBLE; if((vertexType & (CF | C3F | C4F)) != 0) vdefined |= COLOR_FLOAT; if((vertexType & (CUB| C3UB | C4UB)) != 0) vdefined |= COLOR_BYTE; if((vertexType & NORMAL_DEFINED) != 0) vdefined |= NORMAL_FLOAT; if((vertexType & VATTR_DEFINED) != 0) vdefined |= VATTR_FLOAT; if((vertexType & TEXCOORD_DEFINED) != 0) vdefined |= TEXCOORD_FLOAT; Pipeline.getPipeline().executeIndexedGeometryVA(cv.ctx, this, geoType, isNonUniformScale, ignoreVertexColors, initialIndexIndex, validIndexCount, maxCoordIndex + 1, (vertexFormat | c4fAllocated), vdefined, mirrorFloatRefCoords, mirrorDoubleRefCoords, cfdata, cbdata, mirrorFloatRefNormals, vertexAttrCount, vertexAttrSizes, mirrorFloatRefVertexAttrs, ((texCoordSetMap == null) ? 0:texCoordSetMap.length), texCoordSetMap, cv.numActiveTexUnit, texCoordStride, mirrorRefTexCoords, cdirty, indexCoord); } } // end of non interleaved and by reference }//end of non io buffer else { if ((vertexFormat & GeometryArray.INTERLEAVED) != 0) { if( interleavedFloatBufferImpl == null) return; float[] cdata = null; synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { // update the alpha values retVal = updateAlphaInInterLeavedData(cv, screen, alpha); useAlpha = (retVal[0] == Boolean.TRUE); cdata = (float[])retVal[1]; if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } Pipeline.getPipeline().executeIndexedGeometryBuffer(cv.ctx, this, geoType, isNonUniformScale, useAlpha, ignoreVertexColors, initialIndexIndex, validIndexCount, maxCoordIndex + 1, vertexFormat, texCoordSetCount, texCoordSetMap, (texCoordSetMap == null) ? 0 : texCoordSetMap.length, texCoordSetMapOffset, cv.numActiveTexUnit, interleavedFloatBufferImpl.getBufferAsObject(), cdata, cdirty, indexCoord); } //end of interleaved else { // Check if a vertexformat is set, but the array is null // if yes, don't draw anything if ((vertexType == 0) || ((vertexType & VERTEX_DEFINED) == 0) || (((vertexFormat & GeometryArray.COLOR) != 0) && (vertexType & COLOR_DEFINED) == 0) || (((vertexFormat & GeometryArray.NORMALS) != 0) && (vertexType & NORMAL_DEFINED) == 0) || (((vertexFormat & GeometryArray.VERTEX_ATTRIBUTES) != 0) && (vertexType & VATTR_DEFINED) == 0) || (((vertexFormat& GeometryArray.TEXTURE_COORDINATE) != 0) && (vertexType & TEXCOORD_DEFINED) == 0)) { return; } else { byte[] cbdata = null; float[] cfdata = null; if ((vertexType & CF ) != 0) { synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { cfdata = updateAlphaInFloatRefColors(cv, screen, alpha); if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { // XXXX: handle transparency case //cfdata = null; cfdata = mirrorFloatRefColors[0]; // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } } else if ((vertexType & CUB ) != 0) { synchronized (this) { cdirty = dirtyFlag; if (updateAlpha && !ignoreVertexColors) { cbdata = updateAlphaInByteRefColors( cv, screen, alpha); if (alpha != lastScreenAlpha) { lastScreenAlpha = alpha; cdirty |= COLOR_CHANGED; } } else { // XXXX: handle transparency case // cbdata = null; cbdata = mirrorUnsignedByteRefColors[0]; // if transparency switch between on/off if (lastScreenAlpha != -1) { lastScreenAlpha = -1; cdirty |= COLOR_CHANGED; } } dirtyFlag = 0; } } else { cdirty = dirtyFlag; } Object vcoord = null, cdataBuffer=null, normal=null; int vdefined = 0; if((vertexType & PF) != 0) { vdefined |= COORD_FLOAT; vcoord = floatBufferRefCoords.getBufferAsObject(); } else if((vertexType & PD ) != 0) { vdefined |= COORD_DOUBLE; vcoord = doubleBufferRefCoords.getBufferAsObject(); } if((vertexType & CF ) != 0) { vdefined |= COLOR_FLOAT; cdataBuffer = floatBufferRefColors.getBufferAsObject(); } else if((vertexType & CUB) != 0) { vdefined |= COLOR_BYTE; cdataBuffer = byteBufferRefColors.getBufferAsObject(); } if((vertexType & NORMAL_DEFINED) != 0) { vdefined |= NORMAL_FLOAT; normal = floatBufferRefNormals.getBufferAsObject(); } if ((vertexType & VATTR_DEFINED) != 0) { vdefined |= VATTR_FLOAT; } if ((vertexType & TEXCOORD_DEFINED) != 0) { vdefined |= TEXCOORD_FLOAT; } Pipeline.getPipeline().executeIndexedGeometryVABuffer(cv.ctx, this, geoType, isNonUniformScale, ignoreVertexColors, initialIndexIndex, validIndexCount, maxCoordIndex + 1, (vertexFormat | c4fAllocated), vdefined, vcoord, cdataBuffer, cfdata, cbdata, normal, vertexAttrCount, vertexAttrSizes, nioFloatBufferRefVertexAttrs, ((texCoordSetMap == null) ? 0:texCoordSetMap.length), texCoordSetMap, cv.numActiveTexUnit, texCoordStride, refTexCoords, cdirty, indexCoord); } } // end of non interleaved and by reference } // end of nio buffer } void buildGA(Canvas3D cv, RenderAtom ra, boolean isNonUniformScale, boolean updateAlpha, float alpha, boolean ignoreVertexColors, Transform3D xform, Transform3D nxform) { int cdirty; boolean useAlpha = false; Object[] retVal; if (mirrorGeometry != null) { ((GeometryArrayRetained)mirrorGeometry).buildGA(cv, ra, isNonUniformScale, updateAlpha, alpha, ignoreVertexColors, xform, nxform); } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -