Example usage for org.lwjgl.opengl ARBMultitexture glClientActiveTextureARB

List of usage examples for org.lwjgl.opengl ARBMultitexture glClientActiveTextureARB

Introduction

In this page you can find the example usage for org.lwjgl.opengl ARBMultitexture glClientActiveTextureARB.

Prototype

public static native void glClientActiveTextureARB(@NativeType("GLenum") int texture);

Source Link

Document

Selects the vertex array client state parameters to be modified by the TexCoordPointer command and the array affected by EnableClientState and DisableClientState with parameter TEXTURE_COORD_ARRAY.

Usage

From source file:com.ardor3d.renderer.lwjgl.LwjglRenderer.java

License:Open Source License

public void checkAndSetTextureArrayUnit(final int unit, final RendererRecord record,
        final ContextCapabilities caps) {
    if (record.getCurrentTextureArraysUnit() != unit && caps.isMultitextureSupported()) {
        ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB + unit);
        record.setCurrentTextureArraysUnit(unit);
    }// w  w  w .  j a va  2  s . c  o m
}

From source file:espresso3d.engine.renderer.E3DGeometryRenderer.java

License:Open Source License

/**
 * This will render a list of triangles using vertexarrays.  It assumes that the list
 * of triangles all share the same texture!
 * @param triangleList List of triangles to render all containing the same texture
 *///from  w w w .  j  a v  a  2  s  .co  m
private void renderTexturedTriangleList(List triangleList) {
    if (triangleList == null)
        return;

    E3DTriangle triangle = null;
    List renderList = null;
    int listSize = triangleList.size();
    if (listSize <= 0)
        return;

    //Get vertex buffers
    int bufferSize = listSize * 12;
    if (bufferSize > MAX_BUFFER_SIZE) {
        int maxLength = (int) (MAX_BUFFER_SIZE / 12.0);

        renderTexturedTriangleList(triangleList.subList(maxLength, triangleList.size()));
        renderList = triangleList.subList(0, maxLength);
    } else
        renderList = triangleList;

    vertexBuffer.clear();
    colorBuffer.clear();
    texCoordBuffer.clear();
    texCoordDetail0Buffer.clear();
    texCoordDetail1Buffer.clear();

    for (int i = 0; i < renderList.size(); i++) {
        triangle = (E3DTriangle) renderList.get(i);

        triangle.appendVertexBuffer(vertexBuffer);
        triangle.appendTexCoordBuffer(texCoordBuffer);
        triangle.appendVertexColorBuffer(colorBuffer);

        triangle.appendTexCoordDetail0Buffer(texCoordDetail0Buffer);
        triangle.appendTexCoordDetail1Buffer(texCoordDetail1Buffer);
    }

    int detail0TextureID = -1;
    int detail1TextureID = -1;

    if (triangle.isTextureDetail0Available())
        detail0TextureID = triangle.getTextureDetail0().getGlTextureID();
    if (triangle.isTextureDetail1Available())
        detail1TextureID = triangle.getTextureDetail1().getGlTextureID();

    // Put arrays in float buffers and REWIND them (very important).
    vertexBuffer.rewind();
    texCoordBuffer.rewind();
    texCoordDetail0Buffer.rewind();
    texCoordDetail1Buffer.rewind();
    colorBuffer.rewind();

    // Send float buffers to LWJGL.
    GL11.glVertexPointer(3, 0, vertexBuffer);
    GL11.glColorPointer(4, 0, colorBuffer);

    //Draw vertices
    ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB);
    //       GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
    GL11.glTexCoordPointer(2, 0, texCoordBuffer);

    if (detail0TextureID != -1
            && getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() >= 2) {
        ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE1_ARB);
        //          GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        GL11.glTexCoordPointer(2, 0, texCoordDetail0Buffer);

        if (detail1TextureID != -1
                && getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() >= 3) {
            ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE2_ARB);
            //            GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
            GL11.glTexCoordPointer(2, 0, texCoordDetail1Buffer);
        }
    }

    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, renderList.size() * 3);
}

From source file:espresso3d.engine.renderer.E3DGeometryRenderer.java

License:Open Source License

/**
 * This will render a list of quads using vertexarrays.  It assumes that the list
 * of quadss all share the same texture!
 * @param quadList List of quads to render all containing the same texture
 *///from w  ww.j a  va2s  .  c  om
private void renderTexturedQuadList(List quadList) {
    if (quadList == null)
        return;

    E3DQuad quad = null;
    List renderList;

    int listSize = quadList.size();
    if (listSize <= 0)
        return;

    int bufferSize = listSize * 16;
    if (bufferSize > MAX_BUFFER_SIZE) {
        int maxLength = (int) (MAX_BUFFER_SIZE / 16.0);

        renderTexturedQuadList(quadList.subList(maxLength, quadList.size()));
        renderList = quadList.subList(0, maxLength);
    } else
        renderList = quadList;

    vertexBuffer.clear();
    colorBuffer.clear();
    texCoordBuffer.clear();
    texCoordDetail0Buffer.clear();
    texCoordDetail1Buffer.clear();

    for (int i = 0; i < renderList.size(); i++) {
        quad = (E3DQuad) renderList.get(i);

        quad.appendVertexBuffer(vertexBuffer);
        quad.appendTexCoordBuffer(texCoordBuffer);

        quad.appendVertexColorBuffer(colorBuffer);
        quad.appendTexCoordDetail0Buffer(texCoordDetail0Buffer);
        quad.appendTexCoordDetail1Buffer(texCoordDetail1Buffer);
    }
    //Setup textures
    //        int glTextureID = -1;
    int detail0TextureID = -1;
    int detail1TextureID = -1;

    //        if(quad.isTextureAvailable())
    //           glTextureID = quad.getTexture().getGlTextureID();
    if (quad.isTextureDetail0Available())
        detail0TextureID = quad.getTextureDetail0().getGlTextureID();
    if (quad.isTextureDetail1Available())
        detail1TextureID = quad.getTextureDetail1().getGlTextureID();

    //        disableAllTextureUnits();
    //        if(textured)
    //            setupTextureUnits(glTextureID, detail0TextureID, detail1TextureID);

    //        int glBuffer;

    // Put arrays in float buffers and REWIND them (very important).
    vertexBuffer.rewind();
    texCoordBuffer.rewind();
    texCoordDetail0Buffer.rewind();
    texCoordDetail1Buffer.rewind();
    colorBuffer.rewind();

    // Send float buffers to LWJGL.
    GL11.glVertexPointer(3, 0, vertexBuffer);
    GL11.glColorPointer(4, 0, colorBuffer);

    //Draw vertices
    ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB);
    //     GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
    GL11.glTexCoordPointer(2, 0, texCoordBuffer);

    if (getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() >= 2
            && detail0TextureID != -1) {
        ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE1_ARB);
        //       GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
        GL11.glTexCoordPointer(2, 0, texCoordDetail0Buffer);

        if (getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() >= 3
                && detail1TextureID != -1) {
            ARBMultitexture.glClientActiveTextureARB(ARBMultitexture.GL_TEXTURE2_ARB);
            //         GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
            GL11.glTexCoordPointer(2, 0, texCoordDetail1Buffer);
        }
    }

    GL11.glDrawArrays(GL11.GL_QUADS, 0, renderList.size() * 4);
}

From source file:kuake2.render.lwjgl.Image.java

License:Open Source License

void GL_SelectTexture(int texture /* GLenum */) {
    int tmu;//from  w w w .j a va  2s. com

    tmu = (texture == GL_TEXTURE0) ? 0 : 1;

    if (tmu == gl_state.currenttmu) {
        return;
    }

    gl_state.currenttmu = tmu;

    ARBMultitexture.glActiveTextureARB(texture);
    ARBMultitexture.glClientActiveTextureARB(texture);
}

From source file:kuake2.render.lwjgl.Mesh.java

License:Open Source License

/**
 * GL_DrawAliasFrameLerp/*w  w w . j a va2  s .c o  m*/
 * <p/>
 * interpolates between two frames and origins
 * FIXME: batch lerp all vertexes
 */
void GL_DrawAliasFrameLerp(qfiles.dmdl_t paliashdr, float backlerp) {
    qfiles.daliasframe_t frame = paliashdr.aliasFrames[currententity.frame];

    int[] verts = frame.verts;

    qfiles.daliasframe_t oldframe = paliashdr.aliasFrames[currententity.oldframe];

    int[] ov = oldframe.verts;

    float alpha;
    if ((currententity.flags & Defines.RF_TRANSLUCENT) != 0)
        alpha = currententity.alpha;
    else
        alpha = 1.0f;

    // PMM - added double shell
    if ((currententity.flags & (Defines.RF_SHELL_RED | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE
            | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0)
        GL11.glDisable(GL11.GL_TEXTURE_2D);

    float frontlerp = 1.0f - backlerp;

    // move should be the delta back to the previous frame * backlerp
    Math3D.VectorSubtract(currententity.oldorigin, currententity.origin, frontv);
    Math3D.AngleVectors(currententity.angles, vectors[0], vectors[1], vectors[2]);

    move[0] = Math3D.DotProduct(frontv, vectors[0]); // forward
    move[1] = -Math3D.DotProduct(frontv, vectors[1]); // left
    move[2] = Math3D.DotProduct(frontv, vectors[2]); // up

    Math3D.VectorAdd(move, oldframe.translate, move);

    for (int i = 0; i < 3; i++) {
        move[i] = backlerp * move[i] + frontlerp * frame.translate[i];
        frontv[i] = frontlerp * frame.scale[i];
        backv[i] = backlerp * oldframe.scale[i];
    }

    // ab hier wird optimiert

    GL_LerpVerts(paliashdr.num_xyz, ov, verts, move, frontv, backv);

    //GL11.glEnableClientState( GL11.GL_VERTEX_ARRAY );
    GL11.glVertexPointer(3, 0, vertexArrayBuf);

    // PMM - added double damage shell
    if ((currententity.flags & (Defines.RF_SHELL_RED | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE
            | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0) {
        GL11.glColor4f(shadelight[0], shadelight[1], shadelight[2], alpha);
    } else {
        GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
        GL11.glColorPointer(4, 0, colorArrayBuf);

        //
        // pre light everything
        //
        FloatBuffer color = colorArrayBuf;
        float l;
        int size = paliashdr.num_xyz;
        int j = 0;
        for (int i = 0; i < size; i++) {
            l = shadedots[(verts[i] >>> 24) & 0xFF];
            color.put(j, l * shadelight[0]);
            color.put(j + 1, l * shadelight[1]);
            color.put(j + 2, l * shadelight[2]);
            color.put(j + 3, alpha);
            j += 4;
        }
    }

    ARBMultitexture.glClientActiveTextureARB(GL_TEXTURE0);
    GL11.glTexCoordPointer(2, 0, textureArrayBuf);
    //GL11.glEnableClientState( GL11.GL_TEXTURE_COORD_ARRAY);

    int pos = 0;
    int[] counts = paliashdr.counts;

    IntBuffer srcIndexBuf = null;

    FloatBuffer dstTextureCoords = textureArrayBuf;
    FloatBuffer srcTextureCoords = paliashdr.textureCoordBuf;

    int dstIndex = 0;
    int srcIndex = 0;
    int count;
    int mode;
    int size = counts.length;
    for (int j = 0; j < size; j++) {

        // get the vertex count and primitive type
        count = counts[j];
        if (count == 0)
            break; // done

        srcIndexBuf = paliashdr.indexElements[j];

        mode = GL11.GL_TRIANGLE_STRIP;
        if (count < 0) {
            mode = GL11.GL_TRIANGLE_FAN;
            count = -count;
        }
        srcIndex = pos << 1;
        srcIndex--;
        for (int k = 0; k < count; k++) {
            dstIndex = srcIndexBuf.get(k) << 1;
            dstTextureCoords.put(dstIndex, srcTextureCoords.get(++srcIndex));
            dstTextureCoords.put(++dstIndex, srcTextureCoords.get(++srcIndex));
        }

        GL11.glDrawElements(mode, srcIndexBuf);
        pos += count;
    }

    // PMM - added double damage shell
    if ((currententity.flags & (Defines.RF_SHELL_RED | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE
            | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0)
        GL11.glEnable(GL11.GL_TEXTURE_2D);

    GL11.glDisableClientState(GL11.GL_COLOR_ARRAY);
}

From source file:kuake2.render.lwjgl.Misc.java

License:Open Source License

void GL_SetDefaultState() {
    GL11.glClearColor(1f, 0f, 0.5f, 0.5f); // original quake2
    //GL11.glClearColor(0, 0, 0, 0); // replaced with black
    GL11.glCullFace(GL11.GL_FRONT);/*from w  ww .  j  a  v a 2 s .c o  m*/
    GL11.glEnable(GL11.GL_TEXTURE_2D);

    GL11.glEnable(GL11.GL_ALPHA_TEST);
    GL11.glAlphaFunc(GL11.GL_GREATER, 0.666f);

    GL11.glDisable(GL11.GL_DEPTH_TEST);
    GL11.glDisable(GL11.GL_CULL_FACE);
    GL11.glDisable(GL11.GL_BLEND);

    GL11.glColor4f(1, 1, 1, 1);

    GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
    GL11.glShadeModel(GL11.GL_FLAT);

    GL_TextureMode(gl_texturemode.string);
    GL_TextureAlphaMode(gl_texturealphamode.string);
    GL_TextureSolidMode(gl_texturesolidmode.string);

    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_min);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);

    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);

    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

    GL_TexEnv(GL11.GL_REPLACE);

    if (qglPointParameterfEXT) {
        // float[] attenuations = { gl_particle_att_a.value, gl_particle_att_b.value, gl_particle_att_c.value };
        FloatBuffer att_buffer = BufferUtils.createFloatBuffer(4);
        att_buffer.put(0, gl_particle_att_a.value);
        att_buffer.put(1, gl_particle_att_b.value);
        att_buffer.put(2, gl_particle_att_c.value);

        GL11.glEnable(GL11.GL_POINT_SMOOTH);
        EXTPointParameters.glPointParameterfEXT(EXTPointParameters.GL_POINT_SIZE_MIN_EXT,
                gl_particle_min_size.value);
        EXTPointParameters.glPointParameterfEXT(EXTPointParameters.GL_POINT_SIZE_MAX_EXT,
                gl_particle_max_size.value);
        EXTPointParameters.glPointParameterEXT(EXTPointParameters.GL_DISTANCE_ATTENUATION_EXT, att_buffer);
    }

    if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f) {
        GL11.glEnable(EXTSharedTexturePalette.GL_SHARED_TEXTURE_PALETTE_EXT);

        GL_SetTexturePalette(d_8to24table);
    }

    GL_UpdateSwapInterval();

    /*
     * vertex array extension
     */
    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    ARBMultitexture.glClientActiveTextureARB(GL_TEXTURE0);
    GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);
}

From source file:kuake2.render.lwjgl.Surf.java

License:Open Source License

/**
 * R_DrawBrushModel/*from  w  ww . ja v a 2 s.  c  o  m*/
 */
void R_DrawBrushModel(entity_t e) {
    if (currentmodel.nummodelsurfaces == 0)
        return;

    currententity = e;
    gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1;

    boolean rotated;
    if (e.angles[0] != 0 || e.angles[1] != 0 || e.angles[2] != 0) {
        rotated = true;
        for (int i = 0; i < 3; i++) {
            mins[i] = e.origin[i] - currentmodel.radius;
            maxs[i] = e.origin[i] + currentmodel.radius;
        }
    } else {
        rotated = false;
        Math3D.VectorAdd(e.origin, currentmodel.mins, mins);
        Math3D.VectorAdd(e.origin, currentmodel.maxs, maxs);
    }

    if (R_CullBox(mins, maxs))
        return;

    GL11.glColor3f(1, 1, 1);

    // memset (gl_lms.lightmap_surfaces, 0, sizeof(gl_lms.lightmap_surfaces));

    // TODO wird beim multitexturing nicht gebraucht
    //gl_lms.clearLightmapSurfaces();

    Math3D.VectorSubtract(r_newrefdef.vieworg, e.origin, modelorg);
    if (rotated) {
        Math3D.VectorCopy(modelorg, org);
        Math3D.AngleVectors(e.angles, forward, right, up);
        modelorg[0] = Math3D.DotProduct(org, forward);
        modelorg[1] = -Math3D.DotProduct(org, right);
        modelorg[2] = Math3D.DotProduct(org, up);
    }

    GL11.glPushMatrix();

    e.angles[0] = -e.angles[0]; // stupid quake bug
    e.angles[2] = -e.angles[2]; // stupid quake bug
    R_RotateForEntity(e);
    e.angles[0] = -e.angles[0]; // stupid quake bug
    e.angles[2] = -e.angles[2]; // stupid quake bug

    GL_EnableMultitexture(true);
    GL_SelectTexture(GL_TEXTURE0);
    GL_TexEnv(GL11.GL_REPLACE);
    GL11.glInterleavedArrays(GL11.GL_T2F_V3F, Polygon.BYTE_STRIDE, globalPolygonInterleavedBuf);
    GL_SelectTexture(GL_TEXTURE1);
    GL_TexEnv(GL11.GL_MODULATE);
    GL11.glTexCoordPointer(2, Polygon.BYTE_STRIDE, globalPolygonTexCoord1Buf);
    GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    R_DrawInlineBModel();

    ARBMultitexture.glClientActiveTextureARB(GL_TEXTURE1);
    GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    GL_EnableMultitexture(false);

    GL11.glPopMatrix();
}

From source file:kuake2.render.lwjgl.Surf.java

License:Open Source License

/**
 * R_DrawWorld//from   w  w  w  .j  a v  a2  s  . c  om
 */
void R_DrawWorld() {
    if (r_drawworld.value == 0)
        return;

    if ((r_newrefdef.rdflags & Defines.RDF_NOWORLDMODEL) != 0)
        return;

    currentmodel = r_worldmodel;

    Math3D.VectorCopy(r_newrefdef.vieworg, modelorg);

    entity_t ent = worldEntity;
    // auto cycle the world frame for texture animation
    ent.clear();
    ent.frame = (int) (r_newrefdef.time * 2);
    currententity = ent;

    gl_state.currenttextures[0] = gl_state.currenttextures[1] = -1;

    GL11.glColor3f(1, 1, 1);
    // memset (gl_lms.lightmap_surfaces, 0, sizeof(gl_lms.lightmap_surfaces));
    // TODO wird bei multitexture nicht gebraucht
    //gl_lms.clearLightmapSurfaces();

    R_ClearSkyBox();

    GL_EnableMultitexture(true);

    GL_SelectTexture(GL_TEXTURE0);
    GL_TexEnv(GL11.GL_REPLACE);
    GL11.glInterleavedArrays(GL11.GL_T2F_V3F, Polygon.BYTE_STRIDE, globalPolygonInterleavedBuf);
    GL_SelectTexture(GL_TEXTURE1);
    GL11.glTexCoordPointer(2, Polygon.BYTE_STRIDE, globalPolygonTexCoord1Buf);
    GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    if (gl_lightmap.value != 0)
        GL_TexEnv(GL11.GL_REPLACE);
    else
        GL_TexEnv(GL11.GL_MODULATE);

    R_RecursiveWorldNode(r_worldmodel.nodes[0]); // root node

    ARBMultitexture.glClientActiveTextureARB(GL_TEXTURE1);
    GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY);

    GL_EnableMultitexture(false);

    DrawTextureChains();
    R_DrawSkyBox();
    R_DrawTriangleOutlines();
}