Skip to content
This repository was archived by the owner on Jun 24, 2024. It is now read-only.

Commit d9212f3

Browse files
committed
trying to implement quad rendering, getting a grey screen
1 parent e602af2 commit d9212f3

File tree

4 files changed

+133
-13
lines changed

4 files changed

+133
-13
lines changed

data/cubeMapQuadFrag.glsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
uniform samplerCube cubemap;
2+
varying vec2 vertTexCoord;
3+
void main() {
4+
//vec3 color = vec3(textureCube(cubemap, vec3(vertTexCoord,1.0)));
5+
//gl_FragColor = vec4(vertTexCoord, 0.0, 1.0);
6+
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
7+
//gl_FragColor = vec4(color, 1.0);
8+
}

data/cubeMapQuadVert.glsl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
uniform mat4 transform;
2+
uniform mat4 modelview;
3+
uniform mat3 normalMatrix;
4+
attribute vec4 vertex;
5+
attribute vec3 normal;
6+
attribute vec2 texCoord;
7+
8+
varying vec2 vertTexCoord;
9+
10+
void main() {
11+
gl_Position = transform * vertex;
12+
vertTexCoord = texCoord;
13+
}

src/codeanticode/planetarium/Dome.java

Lines changed: 110 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ public class Dome extends PGraphics3D {
4848
public final static int GRID = 1;
4949

5050
protected PShader cubeMapShader;
51+
protected PShader cubeMapQuadShader;
5152
protected PShape domeSphere;
5253
protected PShape gridSphere;
54+
protected PShape domeQuad;
5355

5456
protected int resolution;
5557
protected int offsetX, offsetY;
@@ -61,8 +63,9 @@ public class Dome extends PGraphics3D {
6163
protected boolean cubeMapInit = false;
6264
protected int cubeMapSize = 1024;
6365

64-
protected boolean renderDome = true;
65-
protected boolean renderGrid = false;
66+
protected boolean renderDomeQuad = true;
67+
//protected boolean renderDome = true;
68+
//protected boolean renderGrid = false;
6669
protected int currentFace;
6770

6871
protected boolean requestedRenderDomeChange = false;
@@ -204,8 +207,9 @@ public void beginDraw() {
204207
super.beginDraw();
205208

206209
if (requestedRenderDomeChange) {
207-
renderDome = requestedRenderDome;
208-
if (renderDome) {
210+
//renderDome = requestedRenderDome;
211+
renderDomeQuad = requestedRenderDome;
212+
if (renderDomeQuad) {
209213
background(0xffCCCCCC);
210214
} else {
211215
// go back to default camera and perspective
@@ -216,9 +220,11 @@ public void beginDraw() {
216220
requestedRenderDomeChange = false;
217221
}
218222

219-
if (renderDome && 0 < parent.frameCount) {
223+
//if (renderDome && 0 < parent.frameCount) {
224+
if (renderDomeQuad && 0 < parent.frameCount) {
220225
if (!cubeMapInit) {
221-
initDome();
226+
//initDome();
227+
initDomeQuad();
222228
}
223229

224230
beginPGL();
@@ -239,7 +245,8 @@ public void beginDraw() {
239245

240246

241247
public void endDraw() {
242-
if (renderDome && 0 < parent.frameCount) {
248+
//if (renderDome && 0 < parent.frameCount) {
249+
if (renderDomeQuad && 0 < parent.frameCount) {
243250
endFaceDraw();
244251

245252
// Draw the rest of the cubemap faces
@@ -251,7 +258,8 @@ public void endDraw() {
251258
}
252259

253260
endPGL();
254-
renderDome();
261+
//renderDome();
262+
renderDomeQuad();
255263
pgl.disable(PGL.TEXTURE_CUBE_MAP);
256264
pgl.bindTexture(PGL.TEXTURE_CUBE_MAP, 0);
257265

@@ -281,17 +289,18 @@ protected void setScale(float scale) {
281289

282290

283291
protected void domeRendering(boolean value) {
284-
if (renderDome != value) {
292+
//if (renderDome != value) {
293+
if (renderDomeQuad != value) {
285294
requestedRenderDomeChange = true;
286295
requestedRenderDome = value;
287296
}
288297
}
289298

290-
299+
/*
291300
protected void renderGrid(boolean value) {
292301
renderGrid = value;
293302
}
294-
303+
*/
295304

296305
protected int getCurrentFace() {
297306
return currentFace;
@@ -366,6 +375,75 @@ private void initDome() {
366375
}
367376
}
368377

378+
private void initDomeQuad() {
379+
if (domeQuad == null) {
380+
domeQuad = createShape();
381+
domeQuad.beginShape();
382+
domeQuad.fill(255,255,0);
383+
domeQuad.textureMode(NORMAL);
384+
domeQuad.noStroke();
385+
domeQuad.vertex(0, 0, 0, 0, 0);
386+
domeQuad.vertex(300, 0, 0, 1, 0);
387+
domeQuad.vertex(300, 300, 0, 1, 1);
388+
domeQuad.vertex(0, 300, 0, 0, 1);
389+
domeQuad.endShape();
390+
}
391+
392+
if (cubeMapQuadShader == null) {
393+
cubeMapQuadShader = parent.loadShader("cubeMapQuadFrag.glsl",
394+
"cubeMapQuadVert.glsl");
395+
cubeMapQuadShader.set("cubemap", 1);
396+
}
397+
398+
399+
if (!cubeMapInit) {
400+
PGL pgl = beginPGL();
401+
402+
cubeMapSize = PApplet.min(nextPowerOfTwo(resolution), maxTextureSize);
403+
404+
cubeMapTex = IntBuffer.allocate(1);
405+
pgl.genTextures(1, cubeMapTex);
406+
pgl.bindTexture(PGL.TEXTURE_CUBE_MAP, cubeMapTex.get(0));
407+
pgl.texParameteri(PGL.TEXTURE_CUBE_MAP, PGL.TEXTURE_WRAP_S,
408+
PGL.CLAMP_TO_EDGE);
409+
pgl.texParameteri(PGL.TEXTURE_CUBE_MAP, PGL.TEXTURE_WRAP_T,
410+
PGL.CLAMP_TO_EDGE);
411+
pgl.texParameteri(PGL.TEXTURE_CUBE_MAP, PGL.TEXTURE_WRAP_R, PGL.CLAMP_TO_EDGE);
412+
pgl.texParameteri(PGL.TEXTURE_CUBE_MAP, PGL.TEXTURE_MIN_FILTER,
413+
PGL.NEAREST);
414+
pgl.texParameteri(PGL.TEXTURE_CUBE_MAP, PGL.TEXTURE_MAG_FILTER,
415+
PGL.NEAREST);
416+
for (int i = PGL.TEXTURE_CUBE_MAP_POSITIVE_X; i <
417+
PGL.TEXTURE_CUBE_MAP_POSITIVE_X + 6; i++) {
418+
pgl.texImage2D(i, 0, PGL.RGBA8, cubeMapSize, cubeMapSize, 0,
419+
PGL.RGBA, PGL.UNSIGNED_BYTE, null);
420+
}
421+
422+
// Init fbo, rbo
423+
cubeMapFbo = IntBuffer.allocate(1);
424+
cubeMapRbo = IntBuffer.allocate(1);
425+
pgl.genFramebuffers(1, cubeMapFbo);
426+
pgl.bindFramebuffer(PGL.FRAMEBUFFER, cubeMapFbo.get(0));
427+
pgl.framebufferTexture2D(PGL.FRAMEBUFFER, PGL.COLOR_ATTACHMENT0,
428+
PGL.TEXTURE_CUBE_MAP_POSITIVE_X,
429+
cubeMapTex.get(0), 0);
430+
431+
pgl.genRenderbuffers(1, cubeMapRbo);
432+
pgl.bindRenderbuffer(PGL.RENDERBUFFER, cubeMapRbo.get(0));
433+
pgl.renderbufferStorage(PGL.RENDERBUFFER, PGL.DEPTH_COMPONENT24,
434+
cubeMapSize, cubeMapSize);
435+
436+
// Attach depth buffer to FBO
437+
pgl.framebufferRenderbuffer(PGL.FRAMEBUFFER, PGL.DEPTH_ATTACHMENT,
438+
PGL.RENDERBUFFER, cubeMapRbo.get(0));
439+
440+
endPGL();
441+
442+
cubeMapInit = true;
443+
}
444+
}
445+
446+
369447

370448
private void beginFaceDraw(int face) {
371449
currentFace = face;
@@ -401,7 +479,7 @@ private void endFaceDraw() {
401479
currentFace, 0, 0);
402480
}
403481

404-
482+
/*
405483
private void renderDome() {
406484
renderBorder();
407485
@@ -423,7 +501,26 @@ private void renderDome() {
423501
}
424502
renderScreen();
425503
}
426-
504+
*/
505+
private void renderDomeQuad() {
506+
renderBorder();
507+
508+
//This setting might be better for 2.1.2+:
509+
//camera(0, 0, resolution * 0.5f, 0, 0, 0, 0, 1, 0);
510+
//ortho(-width/2, width/2, -height/2, height/2);
511+
/*
512+
camera();
513+
ortho(domeLeft, domeRight, domeBottom, domeTop);
514+
resetMatrix();
515+
translate(domeDX, domeDY, domeDZ);
516+
scale(domeScale);
517+
shader(cubeMapQuadShader);
518+
*/
519+
resetMatrix();
520+
shape(domeQuad);
521+
resetShader();
522+
renderScreen();
523+
}
427524

428525
private void renderBorder() {
429526
if (borderMethod != null) {

src/codeanticode/planetarium/DomeCamera.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@ public DomeCamera(PApplet parent) {
4343
}
4444

4545
public void setMode(int mode) {
46+
/*
4647
if (mode == Dome.NORMAL) {
4748
renderer.renderGrid(false);
4849
} else if (mode == Dome.GRID) {
4950
renderer.renderGrid(true);
5051
}
52+
*/
5153
}
5254

5355
public int getFace() {

0 commit comments

Comments
 (0)