private String getLogInfo(int shaderId) { int length = ARBShaderObjects.glGetObjectParameteriARB(shaderId, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB); if (length > 0) { return ARBShaderObjects.glGetInfoLogARB(shaderId, length); } return "No Info"; }
@Override public void call(int shader) { int startXUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "startX"); int startYUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "startY"); ARBShaderObjects.glUniform1iARB(startXUniform, x); ARBShaderObjects.glUniform1iARB(startYUniform, y); if(callback != null) callback.call(shader); }
private static int createShader(String filename, int shaderType){ int shader = 0; try { shader = ARBShaderObjects.glCreateShaderObjectARB(shaderType); if(shader == 0) return 0; ARBShaderObjects.glShaderSourceARB(shader, readFileAsString(filename)); ARBShaderObjects.glCompileShaderARB(shader); if (ARBShaderObjects.glGetObjectParameteriARB(shader, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE) throw new RuntimeException("Error creating shader: " + getLogInfo(shader)); return shader; } catch(Exception e) { ARBShaderObjects.glDeleteObjectARB(shader); e.printStackTrace(); return -1; } }
private static int createProgram(String vert, String frag) { int vertId = 0, fragId = 0, program; if(vert != null) vertId = createShader(vert, VERT); if(frag != null) fragId = createShader(frag, FRAG); program = ARBShaderObjects.glCreateProgramObjectARB(); if(program == 0) return 0; if(vert != null) ARBShaderObjects.glAttachObjectARB(program, vertId); if(frag != null) ARBShaderObjects.glAttachObjectARB(program, fragId); ARBShaderObjects.glLinkProgramARB(program); if(ARBShaderObjects.glGetObjectParameteriARB(program, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) { Botania.LOGGER.error(getLogInfo(program)); return 0; } ARBShaderObjects.glValidateProgramARB(program); if (ARBShaderObjects.glGetObjectParameteriARB(program, ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) { Botania.LOGGER.error(getLogInfo(program)); return 0; } return program; }
protected void compileShader() { System.out.println("Compiling shader ..."); final String vertexShader = vertexShader(); final String fragmentShader = fragmentShader(); System.out.println("Vertex shader:"); System.out.println(vertexShader); System.out.println("Fragment shader:"); System.out.println(fragmentShader); _vertexShaderId = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB); ARBShaderObjects.glShaderSourceARB(_vertexShaderId, vertexShader); ARBShaderObjects.glCompileShaderARB(_vertexShaderId); System.out.println("VertexShader Info: "+ARBShaderObjects.glGetInfoLogARB(_vertexShaderId, 8192)); _fragmentShaderId = ARBShaderObjects.glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB); ARBShaderObjects.glShaderSourceARB(_fragmentShaderId, fragmentShader); ARBShaderObjects.glCompileShaderARB(_fragmentShaderId); System.out.println("FragmentShader Info: "+ARBShaderObjects.glGetInfoLogARB(_fragmentShaderId, 8192)); _programId = ARBShaderObjects.glCreateProgramObjectARB(); ARBShaderObjects.glAttachObjectARB(_programId, _vertexShaderId); ARBShaderObjects.glAttachObjectARB(_programId, _fragmentShaderId); ARBShaderObjects.glLinkProgramARB(_programId); System.out.println("Program Info: "+ARBShaderObjects.glGetInfoLogARB(_programId, 8192)); } }
state._programID = ARBShaderObjects.glCreateProgramObjectARB(); state._vertexShaderID = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB); ARBShaderObjects.glShaderSourceARB(state._vertexShaderID, state.getVertexShader()); ARBShaderObjects.glCompileShaderARB(state._vertexShaderID); ARBShaderObjects.glGetObjectParameterARB(state._vertexShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._vertexShaderID, state._vertexShaderName); ARBShaderObjects.glAttachObjectARB(state._programID, state._vertexShaderID); } else if (state._vertexShaderID != -1) { removeVertShader(state); .glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB); ARBShaderObjects.glShaderSourceARB(state._fragmentShaderID, state.getFragmentShader()); ARBShaderObjects.glCompileShaderARB(state._fragmentShaderID); ARBShaderObjects.glGetObjectParameterARB(state._fragmentShaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled); checkProgramError(compiled, state._fragmentShaderID, state._fragmentShaderName); ARBShaderObjects.glAttachObjectARB(state._programID, state._fragmentShaderID); } else if (state._fragmentShaderID != -1) { removeFragShader(state); .glCreateShaderObjectARB(ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB);
public static void useShader(int shader, ShaderCallback callback) { if(!useShaders()) return; lighting = GL11.glGetBoolean(GL11.GL_LIGHTING); GlStateManager.disableLighting(); ARBShaderObjects.glUseProgramObjectARB(shader); if(shader != 0) { int time = ARBShaderObjects.glGetUniformLocationARB(shader, "time"); ARBShaderObjects.glUniform1iARB(time, ClientTickHandler.ticksInGame); if(callback != null) callback.call(shader); } }
@Override @SideOnly(Side.CLIENT) public ShaderCallback getBossBarShaderCallback(boolean background, int shader) { if(shaderCallback == null) shaderCallback = shader1 -> { int grainIntensityUniform = ARBShaderObjects.glGetUniformLocationARB(shader1, "grainIntensity"); int hpFractUniform = ARBShaderObjects.glGetUniformLocationARB(shader1, "hpFract"); float time = getInvulTime(); float grainIntensity = time > 20 ? 1F : Math.max(hardMode ? 0.5F : 0F, time / 20F); ARBShaderObjects.glUniform1fARB(grainIntensityUniform, grainIntensity); ARBShaderObjects.glUniform1fARB(hpFractUniform, getHealth() / getMaxHealth()); }; return background ? null : shaderCallback; }
public static void useShader(int shader, ShaderCallback callback) { if (!useShaders()) { return; } ARBShaderObjects.glUseProgramObjectARB(shader); if (shader != 0) { float frameTime = gameTicks + midGameTick; boolean newFrame = frameTime != prevTime.get(shader); if (newFrame) { int time = ARBShaderObjects.glGetUniformLocationARB(shader, "time"); ARBShaderObjects.glUniform1fARB(time, frameTime); prevTime.put(shader, frameTime); } if (callback != null) { callback.call(shader, newFrame); } } }
public void JITB$applyParameter(final int programId) { final int location = ARBShaderObjects.glGetUniformLocationARB(programId, name()); if(_type.equals(ShaderParameterType.FLOAT)) { ARBShaderObjects.glUniform1fARB(location, getFloat(0)); } else if(_type.equals(ShaderParameterType.FLOAT2)) { ARBShaderObjects.glUniform2fARB(location, getFloat(0), getFloat(1)); } else if(_type.equals(ShaderParameterType.FLOAT3)) { ARBShaderObjects.glUniform3fARB(location, getFloat(0), getFloat(1), getFloat(2)); } else if(_type.equals(ShaderParameterType.FLOAT4)) { ARBShaderObjects.glUniform4fARB(location, getFloat(0), getFloat(1), getFloat(2), getFloat(3)); } }
@SideOnly(Side.CLIENT) private static Consumer<Integer> generateCallback(final float percentile, final boolean shatter, final boolean overflowed) { Minecraft mc = Minecraft.getMinecraft(); return (Integer shader) -> { int percentileUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "percentile"); int overflowedUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "overflowed"); int imageUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "image"); int maskUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "mask"); OpenGlHelper.setActiveTexture(ARBMultitexture.GL_TEXTURE0_ARB); GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture(psiBar).getGlTextureId()); ARBShaderObjects.glUniform1iARB(imageUniform, 0); OpenGlHelper.setActiveTexture(ARBMultitexture.GL_TEXTURE0_ARB + secondaryTextureUnit); GlStateManager.enableTexture2D(); GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture(shatter ? psiBarShatter : psiBarMask).getGlTextureId()); ARBShaderObjects.glUniform1iARB(maskUniform, secondaryTextureUnit); ARBShaderObjects.glUniform1fARB(percentileUniform, percentile); ARBShaderObjects.glUniform1iARB(overflowedUniform, overflowed ? 1 : 0); }; }
public void JITB$bind(double x, double y, double width, double height, boolean flipY) { if(ShaderUtil.shaderSupport()) { ARBShaderObjects.glUseProgramObjectARB(programId()); final int location = ARBShaderObjects.glGetUniformLocationARB(programId(), "PB_OFFSET"); if(flipY) { ARBShaderObjects.glUniform4fARB(location, (float)x, (float)y, (float)height, -1.0f); } else { ARBShaderObjects.glUniform4fARB(location, (float)x, (float)y, 0.0f, 1.0f); } if(null != data()) { data().JITB$applyParameters(programId()); } } else { throw new RuntimeException("Sorry, no shaders supported on your system."); } }
/** Removes the geometry shader */ private static void removeGeomShader(final GLSLShaderObjectsState state) { if (state._geometryShaderID != -1) { ARBShaderObjects.glDetachObjectARB(state._programID, state._geometryShaderID); ARBShaderObjects.glDeleteObjectARB(state._geometryShaderID); } }
private boolean compileSuccess(int shaderId) { int compileStatus = ARBShaderObjects.glGetObjectParameteriARB(shaderId, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB); //int linkStatus = ARBShaderObjects.glGetObjectParameteriARB(shaderId, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB); //int validateStatus = ARBShaderObjects.glGetObjectParameteriARB(shaderId, ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB); if (compileStatus == 0 /*|| linkStatus == 0 || validateStatus == 0*/) { return false; } //logger.info("Shader '{}' successfully compiled.", getURI()); return true; }
private static void checkLinkError(final int programId) { final IntBuffer compiled = BufferUtils.createIntBuffer(1); ARBShaderObjects.glGetObjectParameterARB(programId, GL20.GL_LINK_STATUS, compiled); if (compiled.get(0) == GL11.GL_FALSE) { ARBShaderObjects.glGetObjectParameterARB(programId, GL20.GL_INFO_LOG_LENGTH, compiled); final int length = compiled.get(0); String out = null; if (length > 0) { final ByteBuffer infoLog = BufferUtils.createByteBuffer(length); ARBShaderObjects.glGetInfoLogARB(programId, compiled, infoLog); final byte[] infoBytes = new byte[length]; infoLog.get(infoBytes); out = new String(infoBytes); } logger.severe(out); throw new Ardor3dException("Error linking GLSL shader: " + out); } }
@Override public String getProgramLogInfo(int program) { return ARBShaderObjects.glGetInfoLogARB(program, glGetProgrami(program, GL20.GL_INFO_LOG_LENGTH)); }
private static void deleteShader(int id) { if (id != 0) { ARBShaderObjects.glDeleteObjectARB(id); } }
@Override public int glGetUniformLocation(int program, String uniform) { return ARBShaderObjects.glGetUniformLocationARB(program, uniform); }
@Override public void glUniform1f(int loc, float val) { ARBShaderObjects.glUniform1fARB(loc, val); }
@Override public void glShaderSource(int shader, String shaderSource) { ARBShaderObjects.glShaderSourceARB(shader, shaderSource); }