@@ -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 ) {
0 commit comments