Posted November 26, 201410 yr I'm trying to have an Item where part of it renders with transparency, but it continues to render opaque no matter what. This is the snippet of code I'm using to set the color: if (i == 0) { tess.setColorOpaque_I(color[i]); } else { GL11.glEnable(GL11.GL_BLEND); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); if (item.stackTagCompound != null) { double usesLeft = item.stackTagCompound.getInteger("Uses Left"); double totalUses = item.stackTagCompound.getInteger("Total Uses"); double percentageLeft = usesLeft/totalUses; int alphaLevel = (int) Math.round(255*percentageLeft); tess.setColorRGBA_I(color[i], alphaLevel); } } Am I missing some OpenGL flags or is something not in the right order?
November 27, 201410 yr Hi The GL11 flags don't take effect until you render something. The tessellator queues up a list of commands, but doesn't issue them to openGL until you do the draw. So probably what is happening: 1) queue some drawing commands to tessellator 2) change your flags to transparent 3) queue some more drawing commands to tessellator 4) change your flags to opaque 5) queue some more drawing commands to tessellator 6) tessellator.draw At the time of the draw (6), your opengl flags are in opaque mode. So everything queued up in the tessellator is draw as opaque. You need to either issue the draw command after (1), (3), and (5) (which may not be possible depending on where your render code is), or alternatively draw using OpenGL directly instead of through the tessellator. Alternatively, items can be rendered in passes, so you could render your transparent sections in pass 1 - look at ItemPotion for inspiration...requiresMultipleRenderPasses, hasEffect, getIconFromDamageForRenderPass Your flags look good to me. -TGG
November 28, 201410 yr Author Well, I'm trying multiple renderPasses, here's my full code for rendering one side of the item: tess.setNormal(0, 0, 1); for (int i = 0; i < iconParts; ++i) { tess.startDrawingQuads(); if (i == 0) { tess.setColorOpaque_I(color[i]); } else { GL11.glEnable(GL11.GL_BLEND); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); if (item.stackTagCompound != null) { double usesLeft = item.stackTagCompound.getInteger("Uses Left"); double totalUses = item.stackTagCompound.getInteger("Total Uses"); double percentageLeft = usesLeft/totalUses; int alphaLevel = (int) Math.round(255*percentageLeft); tess.setColorRGBA_I(color[i], alphaLevel); } } tess.addVertexWithUV(0, 0, 0, xMax[i], yMax[i]); tess.addVertexWithUV(1, 0, 0, xMin[i], yMax[i]); tess.addVertexWithUV(1, 1, 0, xMin[i], yMin[i]); tess.addVertexWithUV(0, 1, 0, xMax[i], yMin[i]); tess.draw(); } I don't think it's getting set back to opaque.....
November 28, 201410 yr Hmm that's odd Are you sure the "else" is every being called? Try replacing your if (i==0) {} else {} with the snippet below and seeing if it renders partially opaque GL11.glEnable(GL11.GL_BLEND); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); tess.setColorRGBA_I(color[i], 128); -TGG
November 29, 201410 yr Hi I'm running out of ideas, sorry! What happens if you replace your source image with one that has a partial transparency (i.e. alpha channel of say 0.5)? You could try this utility https://github.com/TheGreyGhost/SpeedyTools/blob/master/src/main/java/speedytools/common/utilities/OpenGLdebugging.java It will dump a copy of all the opengl rendering flags --> place OpenGLdebugging.dumpAllIsEnabled() immediately before your tess.draw(), it make give a clue about which one should be enabled but isn't. -TGG
November 29, 201410 yr Author So, it wasn't working in first person because of something I forgot, but it is staying opaque in the inventory, which it shouldn't be, here is way your debugger prints out: GL_VERTEX_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Vertex array enable) GL_NORMAL_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Normal array enable) GL_COLOR_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (RGBA color array enable) GL_INDEX_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Color-index array enable) GL_TEXTURE_COORD_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Texture coordinate array enable) GL_EDGE_FLAG_ARRAY:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Edge flag array enable) GL_NORMALIZE:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Current normal normalization on/off) GL_FOG:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if fog enabled) GL_LIGHTING:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if lighting is enabled) GL_COLOR_MATERIAL:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if color tracking is enabled) GL_LIGHT0:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 0 enabled) GL_LIGHT1:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 1 enabled) GL_LIGHT2:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 2 enabled) GL_LIGHT3:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 3 enabled) GL_LIGHT4:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 4 enabled) GL_LIGHT5:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 5 enabled) GL_LIGHT6:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 6 enabled) GL_LIGHT7:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if light 7 enabled) GL_POINT_SMOOTH:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Point antialiasing on) GL_LINE_SMOOTH:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Line antialiasing on) GL_LINE_STIPPLE:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Line stipple enable) GL_CULL_FACE:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon culling enabled) GL_POLYGON_SMOOTH:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon antialiasing on) GL_POLYGON_OFFSET_POINT:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon offset enable for GL_POINT mode rasterization) GL_POLYGON_OFFSET_LINE:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon offset enable for GL_LINE mode rasterization) GL_POLYGON_OFFSET_FILL:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon offset enable for GL_FILL mode rasterization) GL_POLYGON_STIPPLE:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Polygon stipple enable) GL_TEXTURE_1D:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if 1-D texturing enabled ) GL_TEXTURE_2D:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if 2-D texturing enabled ) GL_TEXTURE_GEN_S:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_T:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_R:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_Q:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Texgen enabled (x is S, T, R, or Q)) GL_SCISSOR_TEST:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Scissoring enabled) GL_ALPHA_TEST:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Alpha test enabled) GL_STENCIL_TEST:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Stenciling enabled) GL_DEPTH_TEST:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Depth buffer enabled) GL_BLEND:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Blending enabled) GL_DITHER:true[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Dithering enabled) GL_INDEX_LOGIC_OP:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (Color index logical operation enabled) GL_COLOR_LOGIC_OP:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (RGBA color logical operation enabled) GL_AUTO_NORMAL:false[20:57:00] [Client thread/INFO] [sTDOUT]: [com.taji34.troncraft.OpenGLdebugging:dumpAllIsEnabled:294]: (True if automatic normal generation enabled) It stays opaque even with a texture that has an alpha channel of .5, any ideas?
November 29, 201410 yr Hi Are you perhaps drawing it twice on top of itself, once as opaque, once as transparent? What did you forget in 1st person, as a matter of interest? -TGG
December 1, 201410 yr Author I forgot to tell it that it should use my renderer for first person rendering. And I don't think it's rendering multiple times. I'll take a look at that, but I've decided to not do the transparency, it doesn't look right at the moment and I have more important parts of my mod to work on. Thanks for all your help though!
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.