Improve error message when shader uniform is not set

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10650 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
iwg..ic 12 years ago
parent daa3ceee1d
commit eda3ed7160
  1. 95
      engine/src/android/com/jme3/renderer/android/OGLESShaderRenderer.java

@ -323,7 +323,7 @@ public class OGLESShaderRenderer implements Renderer {
// Allocate buffer for compressed formats. // Allocate buffer for compressed formats.
IntBuffer compressedFormats = BufferUtils.createIntBuffer(numCompressedFormats); IntBuffer compressedFormats = BufferUtils.createIntBuffer(numCompressedFormats);
GLES20.glGetIntegerv(GLES20.GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats); GLES20.glGetIntegerv(GLES20.GL_COMPRESSED_TEXTURE_FORMATS, compressedFormats);
// Check for errors after all glGet calls. // Check for errors after all glGet calls.
RendererUtil.checkGLError(); RendererUtil.checkGLError();
@ -333,7 +333,7 @@ public class OGLESShaderRenderer implements Renderer {
} }
TextureUtil.loadTextureFeatures(extensions); TextureUtil.loadTextureFeatures(extensions);
applyRenderState(RenderState.DEFAULT); applyRenderState(RenderState.DEFAULT);
GLES20.glDisable(GLES20.GL_DITHER); GLES20.glDisable(GLES20.GL_DITHER);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
@ -459,7 +459,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glPolygonOffset(state.getPolyOffsetFactor(), GLES20.glPolygonOffset(state.getPolyOffsetFactor(),
state.getPolyOffsetUnits()); state.getPolyOffsetUnits());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.polyOffsetEnabled = true; context.polyOffsetEnabled = true;
context.polyOffsetFactor = state.getPolyOffsetFactor(); context.polyOffsetFactor = state.getPolyOffsetFactor();
context.polyOffsetUnits = state.getPolyOffsetUnits(); context.polyOffsetUnits = state.getPolyOffsetUnits();
@ -469,7 +469,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glPolygonOffset(state.getPolyOffsetFactor(), GLES20.glPolygonOffset(state.getPolyOffsetFactor(),
state.getPolyOffsetUnits()); state.getPolyOffsetUnits());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.polyOffsetFactor = state.getPolyOffsetFactor(); context.polyOffsetFactor = state.getPolyOffsetFactor();
context.polyOffsetUnits = state.getPolyOffsetUnits(); context.polyOffsetUnits = state.getPolyOffsetUnits();
} }
@ -478,7 +478,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.polyOffsetEnabled) { if (context.polyOffsetEnabled) {
GLES20.glDisable(GLES20.GL_POLYGON_OFFSET_FILL); GLES20.glDisable(GLES20.GL_POLYGON_OFFSET_FILL);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.polyOffsetEnabled = false; context.polyOffsetEnabled = false;
context.polyOffsetFactor = 0; context.polyOffsetFactor = 0;
context.polyOffsetUnits = 0; context.polyOffsetUnits = 0;
@ -563,7 +563,7 @@ public class OGLESShaderRenderer implements Renderer {
if (x != vpX || vpY != y || vpW != w || vpH != h) { if (x != vpX || vpY != y || vpW != w || vpH != h) {
GLES20.glViewport(x, y, w, h); GLES20.glViewport(x, y, w, h);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
vpX = x; vpX = x;
vpY = y; vpY = y;
vpW = w; vpW = w;
@ -621,7 +621,7 @@ public class OGLESShaderRenderer implements Renderer {
updateNameBuffer(); updateNameBuffer();
int loc = GLES20.glGetUniformLocation(shader.getId(), uniform.getName()); int loc = GLES20.glGetUniformLocation(shader.getId(), uniform.getName());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
if (loc < 0) { if (loc < 0) {
uniform.setLocation(-1); uniform.setLocation(-1);
// uniform is not declared in shader // uniform is not declared in shader
@ -635,7 +635,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundShaderProgram != shaderId) { if (context.boundShaderProgram != shaderId) {
GLES20.glUseProgram(shaderId); GLES20.glUseProgram(shaderId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
statistics.onShaderUse(shader, true); statistics.onShaderUse(shader, true);
boundShader = shader; boundShader = shader;
context.boundShaderProgram = shaderId; context.boundShaderProgram = shaderId;
@ -653,7 +653,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundShaderProgram != shaderId) { if (context.boundShaderProgram != shaderId) {
GLES20.glUseProgram(shaderId); GLES20.glUseProgram(shaderId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
statistics.onShaderUse(shader, true); statistics.onShaderUse(shader, true);
boundShader = shader; boundShader = shader;
context.boundShaderProgram = shaderId; context.boundShaderProgram = shaderId;
@ -678,7 +678,8 @@ public class OGLESShaderRenderer implements Renderer {
} }
if (uniform.getVarType() == null) { if (uniform.getVarType() == null) {
logger.warning("value is not set yet."); logger.log(Level.WARNING, "Uniform value is not set yet. Shader: {0}, Uniform: {1}",
new Object[]{shader.toString(), uniform.toString()});
return; // value not set yet.. return; // value not set yet..
} }
@ -805,7 +806,7 @@ public class OGLESShaderRenderer implements Renderer {
// Create id // Create id
id = GLES20.glCreateShader(convertShaderType(source.getType())); id = GLES20.glCreateShader(convertShaderType(source.getType()));
RendererUtil.checkGLError(); RendererUtil.checkGLError();
if (id <= 0) { if (id <= 0) {
throw new RendererException("Invalid ID received when trying to create shader."); throw new RendererException("Invalid ID received when trying to create shader.");
} }
@ -853,7 +854,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glCompileShader(id); GLES20.glCompileShader(id);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
GLES20.glGetShaderiv(id, GLES20.GL_COMPILE_STATUS, intBuf1); GLES20.glGetShaderiv(id, GLES20.GL_COMPILE_STATUS, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
@ -906,7 +907,7 @@ public class OGLESShaderRenderer implements Renderer {
if (source.isUpdateNeeded()) { if (source.isUpdateNeeded()) {
updateShaderSourceData(source); updateShaderSourceData(source);
} }
GLES20.glAttachShader(id, source.getId()); GLES20.glAttachShader(id, source.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
} }
@ -914,7 +915,7 @@ public class OGLESShaderRenderer implements Renderer {
// link shaders to program // link shaders to program
GLES20.glLinkProgram(id); GLES20.glLinkProgram(id);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
GLES20.glGetProgramiv(id, GLES20.GL_LINK_STATUS, intBuf1); GLES20.glGetProgramiv(id, GLES20.GL_LINK_STATUS, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
@ -982,10 +983,10 @@ public class OGLESShaderRenderer implements Renderer {
} }
source.clearUpdateNeeded(); source.clearUpdateNeeded();
GLES20.glDeleteShader(source.getId()); GLES20.glDeleteShader(source.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
source.resetObject(); source.resetObject();
} }
@ -999,14 +1000,14 @@ public class OGLESShaderRenderer implements Renderer {
if (source.getId() != -1) { if (source.getId() != -1) {
GLES20.glDetachShader(shader.getId(), source.getId()); GLES20.glDetachShader(shader.getId(), source.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
deleteShaderSource(source); deleteShaderSource(source);
} }
} }
GLES20.glDeleteProgram(shader.getId()); GLES20.glDeleteProgram(shader.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
statistics.onDeleteShader(); statistics.onDeleteShader();
shader.resetObject(); shader.resetObject();
} }
@ -1211,7 +1212,7 @@ public class OGLESShaderRenderer implements Renderer {
if (id == -1) { if (id == -1) {
GLES20.glGenRenderbuffers(1, intBuf1); GLES20.glGenRenderbuffers(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
id = intBuf1.get(0); id = intBuf1.get(0);
rb.setId(id); rb.setId(id);
} }
@ -1219,7 +1220,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundRB != id) { if (context.boundRB != id) {
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, id); GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, id);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundRB = id; context.boundRB = id;
} }
@ -1251,7 +1252,7 @@ public class OGLESShaderRenderer implements Renderer {
imageFormat.renderBufferStorageFormat, imageFormat.renderBufferStorageFormat,
fb.getWidth(), fb.getWidth(),
fb.getHeight()); fb.getHeight());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
} }
} }
@ -1284,7 +1285,7 @@ public class OGLESShaderRenderer implements Renderer {
convertTextureType(tex.getType()), convertTextureType(tex.getType()),
image.getId(), image.getId(),
0); 0);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
} }
@ -1303,7 +1304,7 @@ public class OGLESShaderRenderer implements Renderer {
convertAttachmentSlot(rb.getSlot()), convertAttachmentSlot(rb.getSlot()),
GLES20.GL_RENDERBUFFER, GLES20.GL_RENDERBUFFER,
rb.getId()); rb.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
} }
} }
@ -1315,7 +1316,7 @@ public class OGLESShaderRenderer implements Renderer {
// create FBO // create FBO
GLES20.glGenFramebuffers(1, intBuf1); GLES20.glGenFramebuffers(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
id = intBuf1.get(0); id = intBuf1.get(0);
fb.setId(id); fb.setId(id);
objManager.registerObject(fb); objManager.registerObject(fb);
@ -1326,7 +1327,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundFBO != id) { if (context.boundFBO != id) {
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, id); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, id);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
// binding an FBO automatically sets draw buf to GL_COLOR_ATTACHMENT0 // binding an FBO automatically sets draw buf to GL_COLOR_ATTACHMENT0
context.boundDrawBuf = 0; context.boundDrawBuf = 0;
context.boundFBO = id; context.boundFBO = id;
@ -1382,7 +1383,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundFBO != 0) { if (context.boundFBO != 0) {
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
statistics.onFrameBufferUse(null, true); statistics.onFrameBufferUse(null, true);
context.boundFBO = 0; context.boundFBO = 0;
@ -1414,7 +1415,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundFBO != fb.getId()) { if (context.boundFBO != fb.getId()) {
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb.getId()); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb.getId());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
statistics.onFrameBufferUse(fb, true); statistics.onFrameBufferUse(fb, true);
// update viewport to reflect framebuffer's resolution // update viewport to reflect framebuffer's resolution
@ -1464,7 +1465,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundDrawBuf != rb.getSlot()) { if (context.boundDrawBuf != rb.getSlot()) {
GLES20.glActiveTexture(convertAttachmentSlot(rb.getSlot())); GLES20.glActiveTexture(convertAttachmentSlot(rb.getSlot()));
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundDrawBuf = rb.getSlot(); context.boundDrawBuf = rb.getSlot();
} }
} }
@ -1514,7 +1515,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundFBO == fb.getId()) { if (context.boundFBO == fb.getId()) {
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundFBO = 0; context.boundFBO = 0;
} }
@ -1528,7 +1529,7 @@ public class OGLESShaderRenderer implements Renderer {
intBuf1.put(0, fb.getId()); intBuf1.put(0, fb.getId());
GLES20.glDeleteFramebuffers(1, intBuf1); GLES20.glDeleteFramebuffers(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
fb.resetObject(); fb.resetObject();
statistics.onDeleteFrameBuffer(); statistics.onDeleteFrameBuffer();
@ -1638,7 +1639,7 @@ public class OGLESShaderRenderer implements Renderer {
// fall down here is intentional.. // fall down here is intentional..
// case OneDimensional: // case OneDimensional:
GLES20.glTexParameteri(target, GLES20.GL_TEXTURE_WRAP_S, convertWrapMode(tex.getWrap(WrapAxis.S))); GLES20.glTexParameteri(target, GLES20.GL_TEXTURE_WRAP_S, convertWrapMode(tex.getWrap(WrapAxis.S)));
RendererUtil.checkGLError(); RendererUtil.checkGLError();
break; break;
default: default:
@ -1670,7 +1671,7 @@ public class OGLESShaderRenderer implements Renderer {
// create texture // create texture
GLES20.glGenTextures(1, intBuf1); GLES20.glGenTextures(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
texId = intBuf1.get(0); texId = intBuf1.get(0);
img.setId(texId); img.setId(texId);
objManager.registerObject(img); objManager.registerObject(img);
@ -1684,13 +1685,13 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundTextureUnit != 0) { if (context.boundTextureUnit != 0) {
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundTextureUnit = 0; context.boundTextureUnit = 0;
} }
GLES20.glBindTexture(target, texId); GLES20.glBindTexture(target, texId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundTextures[0] = img; context.boundTextures[0] = img;
} }
@ -1779,7 +1780,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glBindTexture(type, texId); GLES20.glBindTexture(type, texId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
textures[unit] = image; textures[unit] = image;
statistics.onTextureUse(tex.getImage(), true); statistics.onTextureUse(tex.getImage(), true);
@ -1818,7 +1819,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glDeleteTextures(1, intBuf1); GLES20.glDeleteTextures(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
image.resetObject(); image.resetObject();
statistics.onDeleteTexture(); statistics.onDeleteTexture();
@ -1877,7 +1878,7 @@ public class OGLESShaderRenderer implements Renderer {
// create buffer // create buffer
GLES20.glGenBuffers(1, intBuf1); GLES20.glGenBuffers(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
bufId = intBuf1.get(0); bufId = intBuf1.get(0);
vb.setId(bufId); vb.setId(bufId);
objManager.registerObject(vb); objManager.registerObject(vb);
@ -1892,7 +1893,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundElementArrayVBO != bufId) { if (context.boundElementArrayVBO != bufId) {
GLES20.glBindBuffer(target, bufId); GLES20.glBindBuffer(target, bufId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundElementArrayVBO = bufId; context.boundElementArrayVBO = bufId;
} }
} else { } else {
@ -1900,7 +1901,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundArrayVBO != bufId) { if (context.boundArrayVBO != bufId) {
GLES20.glBindBuffer(target, bufId); GLES20.glBindBuffer(target, bufId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundArrayVBO = bufId; context.boundArrayVBO = bufId;
} }
} }
@ -1974,7 +1975,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glDeleteBuffers(1, intBuf1); GLES20.glDeleteBuffers(1, intBuf1);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
vb.resetObject(); vb.resetObject();
} }
} }
@ -1986,7 +1987,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES20.glDisableVertexAttribArray(idx); GLES20.glDisableVertexAttribArray(idx);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundAttribs[idx] = null; context.boundAttribs[idx] = null;
} }
context.attribIndexList.copyNewToOld(); context.attribIndexList.copyNewToOld();
@ -2046,7 +2047,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundArrayVBO != bufId) { if (context.boundArrayVBO != bufId) {
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufId); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundArrayVBO = bufId; context.boundArrayVBO = bufId;
} }
@ -2058,7 +2059,7 @@ public class OGLESShaderRenderer implements Renderer {
vb.isNormalized(), vb.isNormalized(),
vb.getStride(), vb.getStride(),
0); 0);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
attribs[loc] = vb; attribs[loc] = vb;
@ -2102,7 +2103,7 @@ public class OGLESShaderRenderer implements Renderer {
if (context.boundElementArrayVBO != bufId) { if (context.boundElementArrayVBO != bufId) {
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, bufId); GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, bufId);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
context.boundElementArrayVBO = bufId; context.boundElementArrayVBO = bufId;
} }
@ -2333,7 +2334,7 @@ public class OGLESShaderRenderer implements Renderer {
GLES10.glPointSize(mesh.getPointSize()); GLES10.glPointSize(mesh.getPointSize());
context.pointSize = mesh.getPointSize(); context.pointSize = mesh.getPointSize();
} }
*/ */
if (context.lineWidth != mesh.getLineWidth()) { if (context.lineWidth != mesh.getLineWidth()) {
GLES20.glLineWidth(mesh.getLineWidth()); GLES20.glLineWidth(mesh.getLineWidth());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
@ -2432,7 +2433,7 @@ public class OGLESShaderRenderer implements Renderer {
loc = GLES20.glGetAttribLocation(programId, attributeName); loc = GLES20.glGetAttribLocation(programId, attributeName);
RendererUtil.checkGLError(); RendererUtil.checkGLError();
if (loc < 0) { if (loc < 0) {
attrib.setLocation(-1); attrib.setLocation(-1);
return; // not available in shader. return; // not available in shader.
@ -2455,7 +2456,7 @@ public class OGLESShaderRenderer implements Renderer {
vb.isNormalized(), vb.isNormalized(),
vb.getStride(), vb.getStride(),
avb.getData()); avb.getData());
RendererUtil.checkGLError(); RendererUtil.checkGLError();
GLES20.glEnableVertexAttribArray(loc); GLES20.glEnableVertexAttribArray(loc);

Loading…
Cancel
Save