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)); } }
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); }
@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); } }
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()); } }
public static SharedGeometryHandle addGeometry(GLDrawContext dc, float[] data) throws IllegalBufferException { if(staticdc == null) staticdc = dc; int sgeometryIndex = 0; while(true) { // create an instance if needed if(geometries.size() == sgeometryIndex) geometries.add(new SharedGeometry(dc, ++maxIndex)); SharedGeometry geometry = geometries.get(sgeometryIndex); // generate it geometry.validate(dc); // skip if we wont fit if (geometry.size < CAPACITY) { // add it to our vbo generate_buffer.asFloatBuffer().put(data); dc.updateGeometryAt(geometry.geometry, QUAD_SIZE*geometry.size, generate_buffer); generate_buffer.rewind(); geometry.size++; return new SharedGeometryHandle(geometry); } sgeometryIndex++; } }
@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(); } }
protected float[] getGeometry() { return SharedGeometry.createQuadGeometry(toffsetX, -toffsetY, toffsetX + twidth, -toffsetY - theight, 0, 0, 1, 1); }
@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); } }
private void generateGeometry(int descent) { float[] geodata = new float[256*4*4]; for(int l = 0;l != 16;l++) { int line_offset = 0; for (int c = 0; c != 16; c++) { float dx = line_offset; float dy = tex_height-(l*gentex_line_height+descent); float dw = char_widths[l*16+c]; float dh = gentex_line_height; float[] data = SharedGeometry.createQuadGeometry(0, 0,dw/(float)gentex_line_height, 1, dx/tex_width, dy/tex_height, (dx+dw)/tex_width, (dy+dh)/tex_height); System.arraycopy(data, 0, geodata, (l*16+c)*4*4, 4*4); line_offset += char_widths[l*16+c]+char_spacing; } } geometry = drawContext.storeGeometry(geodata, EGeometryFormatType.Texture2D, false, font.getName()); }
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(); } } }
public MultiImageImage(MultiImageMap map, ImageMetadata settlerMeta, int settlerx, int settlery, ImageMetadata torsoMeta, int torsox, int torsoy) { this.map = map; settler = new Data(); settlerFloats = createGeometry(map, settlerMeta, settlerx, settlery, settler); settlerRectFloats = SharedGeometry.createQuadGeometry(0, 1, 1, 0, settler.umin, settler.vmin, settler.umax, settler.vmax); if (torsoMeta != null) { torso = new Data(); torsoFloats = createGeometry(map, torsoMeta, torsox, torsoy, torso); } else { torso = null; torsoGeometry = null; } }
private static float[] createGeometry(MultiImageMap map, ImageMetadata settlerMeta, int settlerx, int settlery, Data data) { data.width = settlerMeta.width; data.height = settlerMeta.height; data.offsetX = settlerMeta.offsetX; data.offsetY = settlerMeta.offsetY; data.umin = (float) settlerx / map.getWidth(); data.umax = (float) (settlerx + settlerMeta.width) / map.getWidth(); data.vmin = (float) (settlery + settlerMeta.height) / map.getHeight(); data.vmax = (float) settlery / map.getHeight(); return SharedGeometry.createQuadGeometry(settlerMeta.offsetX + IMAGE_DRAW_OFFSET, -settlerMeta.offsetY + IMAGE_DRAW_OFFSET, settlerMeta.offsetX + settlerMeta.width + IMAGE_DRAW_OFFSET, -settlerMeta.offsetY - settlerMeta.height + IMAGE_DRAW_OFFSET, data.umin, data.vmax, data.umax, data.vmin); }