void Button::setActiveImage(Image* const TheImage, Vec2f Size) { TextureObjChunkRefPtr TextureObjChunk; if(TheImage == NULL) { TextureObjChunk = NULL; } else { TextureObjChunk = TextureObjChunk::create(); TextureObjChunk->setImage(TheImage); TextureObjChunk->setWrapS(GL_CLAMP); TextureObjChunk->setWrapT(GL_CLAMP); TextureObjChunk->setMinFilter(GL_LINEAR_MIPMAP_NEAREST); TextureObjChunk->setMagFilter(GL_LINEAR); //TextureObjChunk->setEnvMode(GL_MODULATE); } setActiveTexture(TextureObjChunk, Size); }
static void passedInGenTex(struct textureVertexInfo *genTex) { int c; int i; GLint texUnit[MAX_MULTITEXTURE]; GLint texMode[MAX_MULTITEXTURE]; ttglobal tg = gglobal(); s_shader_capabilities_t *me = getAppearanceProperties()->currentShaderProperties; #ifdef TEXVERBOSE printf ("passedInGenTex, using passed in genTex, textureStackTop %d\n",tg->RenderFuncs.textureStackTop); printf ("passedInGenTex, cubeFace %d\n",getAppearanceProperties()->cubeFace); #endif /* simple shapes, like Boxes and Cones and Spheres will have pre-canned arrays */ if (genTex->pre_canned_textureCoords != NULL) { // printf ("passedInGenTex, A\n"); for (c=0; c<tg->RenderFuncs.textureStackTop; c++) { //printf ("passedInGenTex, c= %d\n",c); /* are we ok with this texture yet? */ if (tg->RenderFuncs.boundTextureStack[c]!=0) { //printf ("passedInGenTex, B\n"); if (setActiveTexture(c,getAppearanceProperties()->transparency,texUnit,texMode)) { struct X3D_Node *tt = getThis_textureTransform(); //printf ("passedInGenTex, C\n"); if (tt!=NULL) do_textureTransform(tt,c); SET_TEXTURE_UNIT_AND_BIND(getAppearanceProperties()->cubeFace,c,tg->RenderFuncs.boundTextureStack[c]); FW_GL_TEXCOORD_POINTER (2,GL_FLOAT,0,genTex->pre_canned_textureCoords); } } } } else { //printf ("passedInGenTex, B\n"); for (c=0; c<tg->RenderFuncs.textureStackTop; c++) { //printf ("passedInGenTex, c=%d\n",c); /* are we ok with this texture yet? */ if (tg->RenderFuncs.boundTextureStack[c]!=0) { //printf ("passedInGenTex, C, boundTextureStack %d\n",tg->RenderFuncs.boundTextureStack[c]); if (setActiveTexture(c,getAppearanceProperties()->transparency,texUnit,texMode)) { //printf ("passedInGenTex, going to bind to texture %d\n",tg->RenderFuncs.boundTextureStack[c]); struct X3D_Node *tt = getThis_textureTransform(); if (tt!=NULL) do_textureTransform(tt,c); SET_TEXTURE_UNIT_AND_BIND(getAppearanceProperties()->cubeFace,c,tg->RenderFuncs.boundTextureStack[c]); FW_GL_TEXCOORD_POINTER (genTex->TC_size, genTex->TC_type, genTex->TC_stride, genTex->TC_pointer); } } } } /* set up the selected shader for this texture(s) config */ if (me != NULL) { //printf ("passedInGenTex, we have tts %d tc %d\n",tg->RenderFuncs.textureStackTop, me->textureCount); if (me->textureCount != -1) glUniform1i(me->textureCount, tg->RenderFuncs.textureStackTop); for (i=0; i<tg->RenderFuncs.textureStackTop; i++) { //printf (" sending in i%d tu %d mode %d\n",i,i,tg->RenderTextures.textureParameterStack[i].multitex_mode); glUniform1i(me->TextureUnit[i],i); glUniform1i(me->TextureMode[i],tg->RenderTextures.textureParameterStack[i].multitex_mode); } #ifdef TEXVERBOSE } else { printf (" NOT sending in %d i+tu+mode because currentShaderProperties is NULL\n",tg->RenderFuncs.textureStackTop); #endif } PRINT_GL_ERROR_IF_ANY(""); }