Skip to content

Commit 44da4a2

Browse files
Alpha layouts
1 parent 7ad39ea commit 44da4a2

3 files changed

Lines changed: 53 additions & 5 deletions

File tree

src/br/nullexcept/mux/core/texel/GLFramebuffer.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,8 @@ public int getHeight() {
5656
}
5757

5858
public void clear(int color){
59-
bind();
6059
glClearColor(Color.red(color)/255.0f, Color.green(color)/255.0f, Color.blue(color)/255.0f, Color.alpha(color)/255.0f);
6160
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
62-
unbind();
6361
}
6462

6563
public GLTexture getTexture() {

src/br/nullexcept/mux/core/texel/TexelBitmap.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ class TexelBitmap implements Bitmap {
1616
private final int id;
1717
private boolean disposed = false;
1818

19+
public TexelBitmap() {
20+
this.id = 0;
21+
this.disposed = true;
22+
width = 0;
23+
height = 0;
24+
}
25+
1926
public TexelBitmap(ByteBuffer encodedData){
2027
id = NanoVG.nvgCreateImageMem(C.VG_CONTEXT,0,encodedData);
2128
int[][] sizes = new int[2][1];

src/br/nullexcept/mux/core/texel/ViewRenderer.java

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
11
package br.nullexcept.mux.core.texel;
22

3+
import br.nullexcept.mux.C;
4+
import br.nullexcept.mux.graphics.Color;
5+
import br.nullexcept.mux.graphics.Paint;
36
import br.nullexcept.mux.graphics.Rect;
4-
import br.nullexcept.mux.utils.Log;
7+
import br.nullexcept.mux.hardware.GLES;
58
import br.nullexcept.mux.view.View;
69
import br.nullexcept.mux.view.ViewGroup;
10+
import org.lwjgl.nanovg.NanoVG;
11+
import org.lwjgl.nanovg.NanoVGGLES2;
712

813
import java.util.HashMap;
914
import java.util.List;
1015

1116
class ViewRenderer {
1217
private static final int FLAG_REQUIRES_DRAW = WindowContainer.FLAG_REQUIRES_DRAW;
1318
private final HashMap<Integer, RenderCache> registry;
19+
private final GLFramebuffer tmpFramebuffer;
20+
private final CacheBitmap cacheAlpha = new CacheBitmap();
21+
private final Paint tmpPaint = new Paint();
22+
private final int img;
1423

1524
ViewRenderer(HashMap<Integer, RenderCache> registry){
1625
this.registry = registry;
26+
tmpFramebuffer = new GLFramebuffer(1,1);
27+
img = NanoVGGLES2.nvglCreateImageFromHandle(C.VG_CONTEXT, tmpFramebuffer.getTexture().getTexture(),0,0, NanoVG.NVG_IMAGE_PREMULTIPLIED|NanoVG.NVG_IMAGE_FLIPY);
1728
}
1829

1930
public void drawInternal(CanvasTexel canvas, View view){
@@ -54,8 +65,19 @@ public void drawInternal(CanvasTexel canvas, View view){
5465
}
5566
}
5667

57-
canvas.begin();
58-
GLTexel.drawViewLayers(borders,textures, alphas);
68+
if (view.getAlpha() == 1.0f) { //FAST DRAW
69+
canvas.begin();
70+
GLTexel.drawViewLayers(borders,textures, alphas);
71+
} else {
72+
// For draw container with alpha draw in a tmp fbo after draw in view fbo
73+
tmpFramebuffer.resize(canvas.getWidth(),canvas.getHeight());
74+
tmpFramebuffer.bind();
75+
tmpFramebuffer.clear(0);
76+
GLTexel.drawViewLayers(borders,textures, alphas);
77+
tmpFramebuffer.unbind();
78+
canvas.begin();
79+
canvas.drawBitmap(0,0, cacheAlpha, tmpPaint);
80+
}
5981
}
6082
view.onDrawForeground(canvas);
6183
view.subFlag(FLAG_REQUIRES_DRAW);
@@ -145,4 +167,25 @@ public float[] createMesh(CanvasTexel dest, View view){
145167
return mesh;
146168
}
147169

170+
public void dispose() {
171+
tmpFramebuffer.dispose();
172+
NanoVG.nvgDeleteImage(C.VG_CONTEXT, img);
173+
}
174+
175+
private class CacheBitmap extends TexelBitmap {
176+
@Override
177+
public int getWidth() {
178+
return tmpFramebuffer.getWidth();
179+
}
180+
181+
@Override
182+
public int getHeight() {
183+
return tmpFramebuffer.getHeight();
184+
}
185+
186+
@Override
187+
public int id() {
188+
return img;
189+
}
190+
}
148191
}

0 commit comments

Comments
 (0)