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

📄 joglpipeline.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            else                fclrs = (FloatBuffer) cdataBuffer;        } else if (byteColorsDefined) {            if (cbdata != null)                bclrs = getColorArrayBuffer(cbdata);            else                bclrs = (ByteBuffer) cdataBuffer;        }                // get normal array        if (normalsDefined) {            norms = (FloatBuffer) ndata;        }                int[] sarray = null;        int[] start_array = null;        int strip_len = 0;        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;            strip_len = sarray.length;            start_array = ((GeometryStripArrayRetained) geo).stripStartOffsetIndices;        }                executeGeometryArrayVA(ctx, geo, geo_type,                isNonUniformScale, ignoreVertexColors,                vcount, vformat, vdefined,                initialCoordIndex, fverts, dverts,                initialColorIndex, fclrs, bclrs,                initialNormalIndex, norms,                vertexAttrCount, vertexAttrSizes,                vertexAttrIndices, vertexAttrBufs,                texCoordMapLength,                texcoordoffset, numActiveTexUnitState,                texIndex, texstride, texCoordBufs, cdirty,                sarray, strip_len, start_array);    }        // used by GeometryArray by Reference in interleaved format with NIO buffer    void executeInterleavedBuffer(Context ctx,            GeometryArrayRetained geo, int geo_type,            boolean isNonUniformScale,            boolean useAlpha,            boolean ignoreVertexColors,            int startVIndex, int vcount, int vformat,            int texCoordSetCount, int[] texCoordSetMap,            int texCoordSetMapLen,            int[] texUnitOffset,            int numActiveTexUnit,            Object varray, float[] cdata, int cdirty) {        if (VERBOSE) System.err.println("JoglPipeline.executeInterleavedBuffer()");                executeGeometryArray(ctx, geo, geo_type,                isNonUniformScale, useAlpha, ignoreVertexColors,                startVIndex, vcount, vformat,                texCoordSetCount, texCoordSetMap, texCoordSetMapLen,                texUnitOffset, numActiveTexUnit, 0, null,                null, (Buffer) varray, cdata, cdirty);    }        void setVertexFormat(Context ctx, GeometryArrayRetained geo,            int vformat, boolean useAlpha, boolean ignoreVertexColors) {        if (VERBOSE) System.err.println("JoglPipeline.setVertexFormat()");                GL gl = context(ctx).getGL();                // Enable and disable the appropriate pointers        if ((vformat & GeometryArray.NORMALS) != 0) {            gl.glEnableClientState(GL.GL_NORMAL_ARRAY);        } else {            gl.glDisableClientState(GL.GL_NORMAL_ARRAY);        }        if (!ignoreVertexColors && ((vformat & GeometryArray.COLOR) != 0)) {            gl.glEnableClientState(GL.GL_COLOR_ARRAY);        } else {            gl.glDisableClientState(GL.GL_COLOR_ARRAY);        }                if (gl.isExtensionAvailable("GL_SUN_global_alpha")) {            if (useAlpha) {                gl.glEnable(GL.GL_GLOBAL_ALPHA_SUN);            } else {                gl.glDisable(GL.GL_GLOBAL_ALPHA_SUN);            }        }                if ((vformat & GeometryArray.COORDINATES) != 0) {            gl.glEnableClientState(GL.GL_VERTEX_ARRAY);        } else {            gl.glDisableClientState(GL.GL_VERTEX_ARRAY);        }    }        void disableGlobalAlpha(Context ctx, GeometryArrayRetained geo, int vformat,            boolean useAlpha, boolean ignoreVertexColors) {        if (VERBOSE) System.err.println("JoglPipeline.disableGlobalAlpha()");                GL gl = context(ctx).getGL();                if (gl.isExtensionAvailable("GL_SUN_global_alpha")) {            if (!ignoreVertexColors && ((vformat & GeometryArray.COLOR) != 0)) {                if (useAlpha) {                    gl.glDisable(GL.GL_GLOBAL_ALPHA_SUN);                }            }        }    }        // used for GeometryArrays    void buildGA(Context ctx,            GeometryArrayRetained geo, int geo_type,            boolean isNonUniformScale, boolean updateAlpha,            float alpha,            boolean ignoreVertexColors,            int startVIndex,            int vcount, int vformat,            int texCoordSetCount, int[] texCoordSetMap,            int texCoordSetMapLen, int[] texCoordSetMapOffset,            int vertexAttrCount, int[] vertexAttrSizes,            double[] xform, double[] nxform,            float[] varray) {        if (VERBOSE) System.err.println("JoglPipeline.buildGA()");        JoglContext jctx = (JoglContext) ctx;        GL gl = context(ctx).getGL();        FloatBuffer verts = null;        int stride = 0, coordoff = 0, normoff = 0, coloroff = 0, texCoordoff = 0;        int texStride = 0;        int vAttrOff = 0;        if ((vformat & GeometryArray.COORDINATES) != 0) {            stride += 3;        }        if ((vformat & GeometryArray.NORMALS) != 0) {            stride += 3;            coordoff += 3;        }                if ((vformat & GeometryArray.COLOR) != 0) {            if ((vformat & GeometryArray.BY_REFERENCE) != 0) {                if ((vformat & GeometryArray.WITH_ALPHA) != 0) {                    stride += 4;                    normoff += 4;                    coordoff += 4;                } else {                    stride += 3;                    normoff += 3;                    coordoff += 3;                }            } else {                stride += 4;                normoff += 4;                coordoff += 4;            }        }                if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {            if ((vformat & GeometryArray.TEXTURE_COORDINATE_2) != 0) {                texStride = 2 * texCoordSetCount;            } else if ((vformat & GeometryArray.TEXTURE_COORDINATE_3) != 0) {                texStride = 3 * texCoordSetCount;            } else if ((vformat & GeometryArray.TEXTURE_COORDINATE_4) != 0) {                texStride = 4 * texCoordSetCount;            }            stride += texStride;            normoff += texStride;            coloroff += texStride;            coordoff += texStride;        }                int vAttrStride = 0;        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;        }                int bstride = stride * BufferUtil.SIZEOF_FLOAT;        // Start sending down from the startVIndex        int initialOffset = startVIndex * stride;        normoff += initialOffset;        coloroff += initialOffset;        coordoff += initialOffset;        texCoordoff += initialOffset;        vAttrOff += initialOffset;                // process alpha for geometryArray without alpha        boolean useAlpha = false;        if (updateAlpha && !ignoreVertexColors) {            useAlpha = true;        }                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) {            int[] sarray = ((GeometryStripArrayRetained) geo).stripVertexCounts;                        int primType = 0;            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 (ignoreVertexColors) {                vformat &= ~GeometryArray.COLOR;            }                        for (int i = 0; i < sarray.length; i++) {                gl.glBegin(primType);                for (int j = 0; j < sarray[i]; j++) {                    if ((vformat & GeometryArray.NORMALS) != 0) {                        if (nxform != null) {                            float nx = (float) (nxform[0] * varray[normoff] +                                    nxform[1] * varray[normoff+1] +                                    nxform[2] * varray[normoff+2]);                            float ny = (float) (nxform[4] * varray[normoff] +                                    nxform[5] * varray[normoff+1] +                                    nxform[6] * varray[normoff+2]);                            float nz = (float) (nxform[8] * varray[normoff] +                                    nxform[9] * varray[normoff+1] +                                    nxform[10] * varray[normoff+2]);                            gl.glNormal3f(nx, ny, nz);                        } else {                            gl.glNormal3f(varray[normoff], varray[normoff+1], varray[normoff+2]);                        }                    }                    if ((vformat & GeometryArray.COLOR) != 0) {                        if (useAlpha) {                            gl.glColor4f(varray[coloroff],                                    varray[coloroff+1],                                    varray[coloroff+2],                                    varray[coloroff+3] * alpha);                        } else {                            if ((vformat & GeometryArray.WITH_ALPHA) != 0) { // alpha is present                                gl.glColor4f(varray[coloroff],                                        varray[coloroff+1],                                        varray[coloroff+2],                                        varray[coloroff+3]);                            } else {                                gl.glColor3f(varray[coloroff],                                        varray[coloroff+1],                                        varray[coloroff+2]);                            }                        }                    }                                        if ((vformat & GeometryArray.VERTEX_ATTRIBUTES) != 0) {                        int vaOff = vAttrOff;                        if (verts == null) {                            verts = FloatBuffer.wrap(varray);                        }                        for (int vaIdx = 0; vaIdx < vertexAttrCount; vaIdx++) {                            switch (vertexAttrSizes[vaIdx]) {                                case 1:                                    verts.position(vaOff);                                    jctx.vertexAttr1fv(gl, vaIdx, verts);                                    break;                                case 2:                                    verts.position(vaOff);                                    jctx.vertexAttr2fv(gl, vaIdx, verts);                                    break;                                case 3:                                    verts.position(vaOff);                                    jctx.vertexAttr3fv(gl, vaIdx, verts);                                    break;                                case 4:                                    verts.position(vaOff);                                    jctx.vertexAttr4fv(gl, vaIdx, verts);                                    break;                            }                                                        vaOff += vertexAttrSizes[vaIdx];                        }                    }                                        if ((vformat & GeometryArray.TEXTURE_COORDINATE) != 0) {                        if (texCoordSetMapLen > 0) {                            if (gl.isExtensionAvailable("GL_VERSION_1_3")) {                                if ((vformat & GeometryArray.TEXTURE_COORDINATE_2) != 0) {                                    for (int k = 0; k < texCoordSetMapLen; k++) {                                        if (texCoordSetMapOffset[k] != -1) {                                            int off = texCoordoff + texCoordSetMapOffset[k];                                            gl.glMultiTexCoord2f(GL.GL_TEXTURE0 + k,                                                    varray[off],                                                    varray[off + 1]);                                        }

⌨️ 快捷键说明

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