@Override public void drawOnlyImageAt(GLDrawContext gl, float x, float y, float z, Color torsoColor, float fow) { try { if(nullGeometry == null || !nullGeometry.isValid()) nullGeometry = gl.storeGeometry(nullData, EGeometryFormatType.VertexOnly2D, false, "placeholder/null"); gl.draw2D(nullGeometry, null, EGeometryType.Quad, 0, 4, x, y, z, 1, 1, 1, null, NULL_IMAGE_ALPHA); gl.draw2D(nullGeometry, null, EGeometryType.LineLoop, 0, 4, x, y, z, 1, 1, 1, Color.RED, 1); } catch (IllegalBufferException e) { e.printStackTrace(); } }
private void validate(GLDrawContext dc) { if(!geometry.isValid()) { geometry = dc.generateGeometry(CAPACITY*4, EGeometryFormatType.Texture2D, true, "sharedgeometry-" + index); size = 0; } }
private void drawViewMark(GLDrawContext context, float x, float y) { try { context.draw2D(lineGeometry, null, EGeometryType.LineLoop, 0, 6, x, y, 0, 1, 1, 1, null, 1); } catch (IllegalBufferException e) { e.printStackTrace(); } }
private void checkStaticHandles(GLDrawContext gl) throws IllegalBufferException { checkHandles(gl); if(buildHandle == null || !buildHandle.isValid()) { buildHandle = gl.generateGeometry(3, EGeometryFormatType.Texture2D, true, "building-progress"); } if(rectHandle == null || SharedGeometry.isInvalid(gl, rectHandle)) { rectHandle = SharedGeometry.addGeometry(gl, SharedGeometry.createQuadGeometry(0, 1, 1, 0, 0, 0, 1, 1)); } }
@Override public GeometryHandle generateGeometry(int vertices, EGeometryFormatType type, boolean writable, String name) { GeometryHandle vertexBufferId = allocateVBO(type, name); bindGeometry(vertexBufferId); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertices*type.getBytesPerVertexSize(), writable ? GL15.GL_DYNAMIC_DRAW : GL15.GL_STATIC_DRAW); setObjectLabel(KHRDebug.GL_BUFFER, vertexBufferId.getInternalId(), name + "-vertices"); return vertexBufferId; }
protected void checkHandles(GLDrawContext gl) throws IllegalBufferException { if (texture == null || !texture.isValid()) { texture = gl.generateTexture(twidth, theight, tdata, name); } if(geometryIndex == null || SharedGeometry.isInvalid(gl, geometryIndex)) { geometryIndex = SharedGeometry.addGeometry(gl, getGeometry()); } }
@Override public void drawImageAtRect(GLDrawContext gl, float x, float y, float width, float height) { try { if(imageRectHandle == null) imageRectHandle = SharedGeometry.addGeometry(gl, SharedGeometry.createQuadGeometry(0,1, 1, 0, umin, vmin, umax, vmax)); draw(gl, imageRectHandle, x, y, 0, width, height, 0, null, 1); } catch (IllegalBufferException e) { e.printStackTrace(); } if (torso != null) { torso.drawImageAtRect(gl, x, y, width, height); } }
@Override public void drawOnlyImageAt(GLDrawContext gl, float x, float y, float z, Color torsoColor, float fow) { TextureHandle texture = map.getTexture(gl); try { if(settlerGeometry == null) { settlerGeometry = SharedGeometry.addGeometry(gl, settlerFloats); if(torsoFloats != null) torsoGeometry = SharedGeometry.addGeometry(gl, torsoFloats); } gl.draw2D(settlerGeometry.geometry, texture, EGeometryType.Quad, settlerGeometry.index, 4, x, y, z, 1, 1, 1, null, fow); if(torsoFloats == null || torsoColor == null) return; gl.draw2D(torsoGeometry.geometry, texture, EGeometryType.Quad, torsoGeometry.index, 4, x, y, z, 1, 1, 1, torsoColor, fow); } catch (IllegalBufferException e) { e.printStackTrace(); } }
private float[] createGeometry() { return SharedGeometry.createQuadGeometry(-offsetX + IMAGE_DRAW_OFFSET, -offsetY + IMAGE_DRAW_OFFSET, -offsetX + width + IMAGE_DRAW_OFFSET,-offsetY + height + IMAGE_DRAW_OFFSET, umin, vmax, umax, vmin); }
private SharedGeometry(GLDrawContext dc, int index) { this.index = index; geometry = dc.generateGeometry(CAPACITY*4, EGeometryFormatType.Texture2D, true, "sharedgeometry-" + index); }
private boolean gl2Draw(GLDrawContext gl, float x, float y, float z, Color torsoColor, float fow, boolean settler, boolean shadow) { try { checkHandles(gl); if(!gl2) return false; ((GL2DrawContext)gl).drawUnified2D(geometryIndex.geometry, texture, EGeometryType.Quad, geometryIndex.index, 4, settler, shadow, x, y, z, 1, 1, 1, torsoColor, fow); } catch(IllegalBufferException e) { e.printStackTrace(); } return true; }
@Override public void drawImageAtRect(GLDrawContext gl, float x, float y, float width, float height) { try { if(rectHandle == null) { rectHandle = SharedGeometry.addGeometry(gl, settlerRectFloats); settlerRectFloats = null; } gl.draw2D(rectHandle.geometry, map.getTexture(gl), EGeometryType.Quad, rectHandle.index, 4, x, y, 0, width, height, 0, null, 1); } catch (IllegalBufferException e) { handleIllegalBufferException(e); } }
@Override public void requestRedraw() { for (RedrawListener l : redrawListeners) { l.requestRedraw(); } }
/** * Creates a crash report. This should not happen if we check that the texture is valid every time. * * @param e * The exception. */ protected void handleIllegalBufferException(IllegalBufferException e) { // TODO Create crash report e.printStackTrace(); }
/** * Checks if this buffer is valid. * * @return <code>true</code> if the buffer is valid and can be used. */ public boolean isValid() { return dc.isValid(); }
GeometryHandle allocateVBO(EGeometryFormatType type, String name) { int vbo = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo); return lastGeometry = new GeometryHandle(this, vbo, 0, type); }
private void draw(GLDrawContext gl, SharedGeometry.SharedGeometryHandle handle, float x, float y, float z, float sx, float sy, float sz, Color color, float fow) { try { if(handle == null) geometryIndex = handle = SharedGeometry.addGeometry(gl, geometry); gl.draw2D(handle.geometry, texture.getTextureIndex(gl), EGeometryType.Quad, handle.index, 4, x, y, z, sx, sy, sz, color, fow); } catch (IllegalBufferException e) { try { texture.recreateTexture(); gl.draw2D(handle.geometry, texture.getTextureIndex(gl), EGeometryType.Quad, handle.index, 4, x, y, z, sx, sy, sz, color, fow); } catch (IllegalBufferException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
protected float[] getGeometry() { return SharedGeometry.createQuadGeometry(toffsetX, -toffsetY, toffsetX + twidth, -toffsetY - theight, 0, 0, 1, 1); }