⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 joglpipeline.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            System.err.println("Vertex format: " + getVertexDescription(vformat));            System.err.println("Geometry type: " + getGeometryDescription(geo_type));            if (carray != null) {                System.err.println("  Separate color array");            } else {                System.err.println("  Colors (if any) interleaved");            }        }                if ((vformat & GeometryArray.COORDINATES) != 0) {            stride += 3;        }        if ((vformat & GeometryArray.NORMALS) != 0) {            stride += 3;            coordoff += 3;        }        if ((vformat & GeometryArray.COLOR) != 0) {            if ((vformat & GeometryArray.WITH_ALPHA) != 0 ) {                stride += 4;                normoff += 4;                coordoff += 4;            } else { /* Handle the case of executeInterleaved 3f */                stride += 3;                normoff += 3;                coordoff += 3;            }        }        if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {            if (EXTRA_DEBUGGING) {                System.err.println("  Number of tex coord sets: " + texCoordSetCount);            }            if ((vformat & GeometryArray.TEXTURE_COORDINATE_2) != 0) {                texSize = 2;                texStride = 2 * texCoordSetCount;            } else if ((vformat & GeometryArray.TEXTURE_COORDINATE_3) != 0) {                texSize = 3;                texStride = 3 * texCoordSetCount;            } else if ((vformat & GeometryArray.TEXTURE_COORDINATE_4) != 0) {                texSize = 4;                texStride = 4 * texCoordSetCount;            }            stride += texStride;            normoff += texStride;            coloroff += texStride;            coordoff += texStride;        }        if ((vformat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {            for (int i = 0; i < vertexAttrCount; i++) {                vAttrStride += vertexAttrSizes[i];            }            stride += vAttrStride;            normoff += vAttrStride;            coloroff += vAttrStride;            coordoff += vAttrStride;            texCoordoff += vAttrStride;        }                bstride = stride * BufferUtil.SIZEOF_FLOAT;                if (geo_type == GeometryRetained.GEO_TYPE_TRI_STRIP_SET ||                geo_type == GeometryRetained.GEO_TYPE_TRI_FAN_SET   ||                geo_type == GeometryRetained.GEO_TYPE_LINE_STRIP_SET) {            sarray = ((GeometryStripArrayRetained) geo).stripVertexCounts;            start_array = ((GeometryStripArrayRetained) geo).stripStartOffsetIndices;        }                // We have to copy if the data isn't specified using NIO        if (varray != null) {            verts = getVertexArrayBuffer(varray);        } else if (varrayBuffer != null) {            verts = (FloatBuffer) varrayBuffer;        } else {            // This should never happen            throw new AssertionError("Unable to get vertex pointer");        }                // using byRef interleaved array and has a separate pointer, then ..        int cstride = stride;        if (carray != null) {            clrs = getColorArrayBuffer(carray);            cstride = 4;        } else {            // FIXME: need to "auto-slice" this buffer later            clrs = verts;        }                cbstride = cstride * BufferUtil.SIZEOF_FLOAT;                // Enable normalize for non-uniform scale (which rescale can't handle)        if (isNonUniformScale) {            gl.glEnable(GL.GL_NORMALIZE);        }                int startVertex = stride  * startVIndex;        int startClrs   = cstride * startVIndex;        if (clrs == verts) {            startClrs += coloroff;        }                /*** Handle non-indexed strip GeometryArray first *******/        if (geo_type == GeometryRetained.GEO_TYPE_TRI_STRIP_SET ||                geo_type == GeometryRetained.GEO_TYPE_TRI_FAN_SET   ||                geo_type == GeometryRetained.GEO_TYPE_LINE_STRIP_SET) {            if (ignoreVertexColors || (carray != null) ||                    ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0 && ((texCoordSetMapLen > 1) ||                    (texCoordSetCount > 1)))) {                useInterleavedArrays = false;            } else {                boolean[] tmp = new boolean[1];                int[] tmp2 = new int[1];                testForInterleavedArrays(vformat, tmp, tmp2);                useInterleavedArrays = tmp[0];                iaFormat = tmp2[0];            }            if (useInterleavedArrays) {                verts.position(startVertex);                gl.glInterleavedArrays(iaFormat, bstride, verts);            } else {                if ((vformat & GeometryArray.NORMALS) != 0) {                    verts.position(startVertex + normoff);                    gl.glNormalPointer(GL.GL_FLOAT, bstride, verts);                }                if (!ignoreVertexColors && (vformat & GeometryArray.COLOR) != 0) {                    if (EXTRA_DEBUGGING) {                        System.err.println("  Doing colors");                    }                    clrs.position(startClrs);                    if ((vformat & GeometryArray.WITH_ALPHA) != 0 || useAlpha) {                        gl.glColorPointer(4, GL.GL_FLOAT, cbstride, clrs);                    } else {                        gl.glColorPointer(3, GL.GL_FLOAT, cbstride, clrs);                    }                }                if ((vformat & GeometryArray.COORDINATES) != 0) {                    verts.position(startVertex + coordoff);                    gl.glVertexPointer(3, GL.GL_FLOAT, bstride, verts);                }                                if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {                    executeTexture(texCoordSetMapLen,                            texSize, bstride, texCoordoff,                            texCoordSetMapOffset,                            numActiveTexUnitState,                            verts, gl);                }                                if ((vformat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {                    int vAttrOffset = startVertex + vAttrOff;                    for (int i = 0; i < vertexAttrCount; i++) {                        ctx.enableVertexAttrArray(gl, i);                        verts.position(vAttrOffset);                        ctx.vertexAttrPointer(gl, i, vertexAttrSizes[i],                                GL.GL_FLOAT, bstride, verts);                        vAttrOffset += vertexAttrSizes[i];                    }                }            }                        switch (geo_type) {                case GeometryRetained.GEO_TYPE_TRI_STRIP_SET:                    primType = GL.GL_TRIANGLE_STRIP;                    break;                case GeometryRetained.GEO_TYPE_TRI_FAN_SET:                    primType = GL.GL_TRIANGLE_FAN;                    break;                case GeometryRetained.GEO_TYPE_LINE_STRIP_SET:                    primType = GL.GL_LINE_STRIP;                    break;            }                        if (gl.isExtensionAvailable("GL_EXT_multi_draw_arrays")) {                gl.glMultiDrawArraysEXT(primType, start_array, 0, sarray, 0, sarray.length);            } else {                for (int i = 0; i < sarray.length; i++) {                    gl.glDrawArrays(primType, start_array[i], sarray[i]);                }            }        } else if ((geo_type == GeometryRetained.GEO_TYPE_QUAD_SET) ||                (geo_type == GeometryRetained.GEO_TYPE_TRI_SET) ||                (geo_type == GeometryRetained.GEO_TYPE_POINT_SET) ||                (geo_type == GeometryRetained.GEO_TYPE_LINE_SET)) {            /******* Handle non-indexed non-striped GeometryArray now *****/            if (ignoreVertexColors || (carray != null) ||                    ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0 && ((texCoordSetMapLen > 1) ||                    (texCoordSetCount > 1)))) {                useInterleavedArrays = false;            } else {                boolean[] tmp = new boolean[1];                int[] tmp2 = new int[1];                testForInterleavedArrays(vformat, tmp, tmp2);                useInterleavedArrays = tmp[0];                iaFormat = tmp2[0];            }                        if (useInterleavedArrays) {                verts.position(startVertex);                gl.glInterleavedArrays(iaFormat, bstride, verts);            } else {                if (EXTRA_DEBUGGING) {                    System.err.println("  startVertex: " + startVertex);                    System.err.println("  stride: " + stride);                    System.err.println("  bstride: " + bstride);                    System.err.println("  normoff: " + normoff);                    System.err.println("  coloroff: " + coloroff);                    System.err.println("  coordoff: " + coordoff);                    System.err.println("  texCoordoff: " + texCoordoff);                }                if ((vformat & GeometryArray.NORMALS) != 0) {                    verts.position(startVertex + normoff);                    gl.glNormalPointer(GL.GL_FLOAT, bstride, verts);                }                if (!ignoreVertexColors && (vformat & GeometryArray.COLOR) != 0) {                    clrs.position(startClrs);                    if ((vformat & GeometryArray.WITH_ALPHA) != 0 || useAlpha) {                        gl.glColorPointer(4, GL.GL_FLOAT, cbstride, clrs);                    } else {                        gl.glColorPointer(3, GL.GL_FLOAT, cbstride, clrs);                    }                }                if ((vformat & GeometryArray.COORDINATES) != 0) {                    verts.position(startVertex + coordoff);                    gl.glVertexPointer(3, GL.GL_FLOAT, bstride, verts);                }                                if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {                    executeTexture(texCoordSetMapLen,                            texSize, bstride, texCoordoff,                            texCoordSetMapOffset,                            numActiveTexUnitState,                            verts, gl);                }                                if ((vformat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {                    int vAttrOffset = startVertex + vAttrOff;                    for (int i = 0; i < vertexAttrCount; i++) {                        ctx.enableVertexAttrArray(gl, i);                        verts.position(vAttrOffset);                        ctx.vertexAttrPointer(gl, i, vertexAttrSizes[i],                                GL.GL_FLOAT, bstride, verts);                        vAttrOffset += vertexAttrSizes[i];                    }                }            }            switch (geo_type){                case GeometryRetained.GEO_TYPE_QUAD_SET : gl.glDrawArrays(GL.GL_QUADS,     0, vcount); break;                case GeometryRetained.GEO_TYPE_TRI_SET  : gl.glDrawArrays(GL.GL_TRIANGLES, 0, vcount); break;                case GeometryRetained.GEO_TYPE_POINT_SET: gl.glDrawArrays(GL.GL_POINTS,    0, vcount); break;                case GeometryRetained.GEO_TYPE_LINE_SET : gl.glDrawArrays(GL.GL_LINES,     0, vcount); break;            }        }                /* clean up if we turned on normalize */        if (isNonUniformScale) {            gl.glDisable(GL.GL_NORMALIZE);        }                if ((vformat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {            resetVertexAttrs(gl, ctx, vertexAttrCount);        }                if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {            resetTexture(gl, ctx);        }    }            // glLockArrays() is invoked only for indexed geometry, and the    // vertexCount is guarenteed to be >= 0.    private void lockArray(GL gl, int vertexCount) {        if (gl.isExtensionAvailable("GL_EXT_compiled_vertex_array")) {            gl.glLockArraysEXT(0, vertexCount);        }    }        private void unlockArray(GL gl) {        if (gl.isExtensionAvailable("GL_EXT_compiled_vertex_array")) {            gl.glUnlockArraysEXT();        }    }        private void            executeGeometryArrayVA(Context absCtx,            GeometryArrayRetained geo,            int geo_type,            boolean isNonUniformScale,            boolean ignoreVertexColors,            int vcount,            int vformat,            int vdefined,            int initialCoordIndex, FloatBuffer fverts, DoubleBuffer dverts,            int initialColorIndex, FloatBuffer fclrs, ByteBuffer bclrs,            int initialNormalIndex, FloatBuffer norms,            int vertexAttrCount, int[] vertexAttrSizes,            int[] vertex

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -