We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I have a program that requires textSize to increase over time. When running it gradually, i.e. textSize(4),5,6,7,etc., the number can reach a very high value without anything bad happening. However, if I try to start off with a high value (the same number as gradually approached), it throws an OutOfMemory exception:
java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space at processing.opengl.PSurfaceJOGL$2.run(PSurfaceJOGL.java:484) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.OutOfMemoryError: Java heap space at java.awt.image.DataBufferInt.(DataBufferInt.java:75) at java.awt.image.Raster.createPackedRaster(Raster.java:467) at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032) at java.awt.image.BufferedImage.(BufferedImage.java:324) at processing.core.PFont.(PFont.java:232) at processing.core.PFont.(PFont.java:337) at processing.core.PGraphics.createFont(PGraphics.java:4078) at processing.core.PApplet.createFont(PApplet.java:6254) at processing.core.PApplet.createDefaultFont(PApplet.java:6188) at processing.core.PGraphics.defaultFontOrDeath(PGraphics.java:8219) at processing.core.PGraphics.textSize(PGraphics.java:4391) at processing.core.PApplet.textSize(PApplet.java:12688) at recaman.draw(recaman.java:150) at processing.core.PApplet.handleDraw(PApplet.java:2418) at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:907) at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692) at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674) at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293) at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147) at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759) at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81) at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452) at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505)
Any help would be appreciated.
I am trying to get P2d mode on a Allwinner based board having MALI-400 GPU. Default renderer works ok. But when i try P3D i get :
Caught handled GLException: EGLGLXDrawableFactory - Could not initialize shared resources for EGLGraphicsDevice[type .egl, v0.0.0, connection :0.0, unitID 0, handle 0x0, owner true, ResourceToolkitLock[obj 0x75ff7c, isOwner true, <b21f42, 8d940c>[count 1, qsz 0, owner <main-SharedResourceRunner>]]] on thread main-SharedResourceRunner
[0]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:518)
[1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
[2]: java.lang.Thread.run(Thread.java:748)
Caused[0] by GLException: Failed to created/initialize EGL display incl. fallback default: native 0x0, error 0x3008/0x3000 on thread main-SharedResourceRunner
[0]: jogamp.opengl.egl.EGLDisplayUtil.eglGetDisplayAndInitialize(EGLDisplayUtil.java:297)
[1]: jogamp.opengl.egl.EGLDisplayUtil.access$300(EGLDisplayUtil.java:58)
[2]: jogamp.opengl.egl.EGLDisplayUtil$1.eglGetAndInitDisplay(EGLDisplayUtil.java:320)
[3]: com.jogamp.nativewindow.egl.EGLGraphicsDevice.open(EGLGraphicsDevice.java:125)
[4]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createEGLSharedResourceImpl(EGLDrawableFactory.java:532)
[5]: jogamp.opengl.egl.EGLDrawableFactory$SharedResourceImplementation.createSharedResource(EGLDrawableFactory.java:516)
[6]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
[7]: java.lang.Thread.run(Thread.java:748)
libGL error: unable to load driver: mali_drm_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: mali_drm
libGL error: unable to load driver: mali_drm_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: mali_drm
I checked with lsmod - i have mali_drm driver loaded [I am running Legacy Kernel armv6hf (3.4) with fbturbo video driver for Xorg 1.18 and libMali.so binary]
Running glmark2-es2 benchmarking software gives me 150fps+ :
OpenGL Information
GL_VENDOR: ARM
GL_RENDERER: Mali-400 MP
GL_VERSION: OpenGL ES 2.0
All other softwares also seems to detect OpenGLES just fine.
Do i need to make some modifications to Processing to make it find the right libs ? eg. replace core.jar / jogamp gluegen?
Here's my Python Mode attempt. However, it's not working yet, it's just pitch black! :-&
This statement crashes the sketch: geombuffer.update(pg_render)
within resizeScreen().
Even when following exactly what it does, it doesn't seem to render anything. :o3
public void update(PGraphics3D pg_src){
resize(pg_src.width, pg_src.height);
pg_geom.beginDraw();
updateMatrices(pg_src);
pg_geom.blendMode(PConstants.REPLACE);
pg_geom.clear();
pg_geom.shader(shader);
pg_geom.noStroke();
scene_display.display(pg_geom);
pg_geom.endDraw();
}
So I'm at loss about it! Sorry. X_X Try finding help on diwi or jdf. ^#(^
"""
* Depth of Field (DoF) (1.20)
* Thomas Diewald (diwi) (2017-Oct-07)
* GitHub.com/diwi/PixelFlow/blob/master/examples/Miscellaneous/
* DepthOfField_Demo/DepthOfField_Demo.java
* Refactor by GoToLoop (v1.4.2) (2018-May-18) (PDE v3.3.5)
* Forum.Processing.org/two/discussion/27905/
* converting-java-code-to-python#Item_20
"""
add_library('PixelFlow')
add_library('peasycam')
from com.jogamp.opengl import GL2
from processing.opengl import PGL
from java.util import Formatter, Locale
from jarray import zeros
formatter = Formatter(Locale.ENGLISH)
POSITION = 'position: (%8.2f, %8.2f, %8.2f)\n'
ROTATION = 'rotation: (%8.2f, %8.2f, %8.2f)\n'
LOOK__AT = 'look-at: (%8.2f, %8.2f, %8.2f)\n'
DISTANCE = 'distance: (%8.2f)\n'
TITLE = __file__[:-5] + ' [fps %6.2f]'
BB_SIZE = 800
BB_OFFSET = BB_SIZE >> 2
BB_TOTAL = BB_SIZE + BB_OFFSET
BB_COORD, BB_DIAM = -BB_TOTAL, BB_TOTAL << 1
XMIN, XMAX = -BB_SIZE, BB_SIZE
YMIN, YMAX = -BB_SIZE, BB_SIZE
ZMIN, ZMAX = 0, BB_SIZE
BOX_DIAM = BB_OFFSET + BB_OFFSET/20
SPH_MIN_D, SPH_MAX_D = BB_OFFSET >> 2, BB_OFFSET >> 1
BOXES, SPHERES = 50, 50
BOX_RANGE, SPH_RANGE = tuple(range(BOXES)), tuple(range(SPHERES))
CROSS_S, ZFAR = 10, 6000
MULT_BLUR, FPS = 30, 60
BLUR_POW, RAD60 = pow(MULT_BLUR, 1/3.0), 60*DEG_TO_RAD
BASE_COL, CROSS_COL = 0x80FFFFFF, 0xd0FFFFFF
SEED, FIXED_SEED = 0, False
FULLSCREEN, RESIZABLE = False, False
apply_dof, alt_render = False, False
resized = zeros(1, 'z')
cube_smooth, cube_facets = DwCube(4), DwCube(2)
shp_scene = pg_render = pg_dof = pg_tmp = None
def settings():
if FULLSCREEN: fullScreen(P3D)
else: size(this.displayWidth*9/10, this.displayHeight*9/10, P3D)
noSmooth()
def setup():
frameRate(FPS); cursor(CROSS)
global surf, canv
surf, canv = this.surface, this.graphics
if RESIZABLE: surf.resizable = True
surf.setLocation(this.displayWidth - width >> 1, 8)
global peasy
peasy = PeasyCam(this, -4.083, -6.096, 7, 2000)
peasy.setRotations(1.085, -.477, 2.91)
global context, dw_filter, dof, param, geombuffer, magnifier
context = DwPixelFlow(this)
dw_filter = DwFilter.get(context)
context.print(); context.printGL()
dof = DepthOfField(context)
param = dof.param
param.mult_blur = MULT_BLUR
class SceneDisplay(DwSceneDisplay):
def display(_, canvas): displayScene(canvas)
geombuffer = DwScreenSpaceGeometryBuffer(context, SceneDisplay())
mag_h = height/3
magnifier = DwMagnifier(this, 4, 0, height - mag_h, mag_h, mag_h)
def draw():
setTitle(); resizeScreen(); displaySceneWrap(pg_render)
dw_filter.gamma.apply(pg_render, pg_render)
apply_dof and applyDoF()
renderScene()
def keyPressed():
global apply_dof, alt_render, shp_scene
k = chr(keyCode) if key != CODED else keyCode
if k == 'P' or k == BACKSPACE: noLoop() if this.looping else loop()
elif k == 'C' or k == CONTROL: printCam()
elif k == ' ': apply_dof ^= True
elif k == SHIFT: alt_render ^= True
elif k == ENTER or k == RETURN: shp_scene = None
def applyDoF():
geom = geombuffer.pg_geom
dw_filter.gaussblur.apply(geom, geom, pg_tmp, BLUR_POW)
param.focus_pos[0] = map(mouseX + .5, 0, width, 00, 1)
param.focus_pos[1] = map(mouseY + .5, 0, height, 1, 0)
dof.apply(pg_render, pg_dof, geombuffer)
dw_filter.copy.apply(pg_dof, pg_render)
def renderScene():
pg = geombuffer.pg_geom if alt_render else pg_render
magnifier.apply(pg, mouseX, mouseY)
magnifier.displayTool()
DwUtils.beginScreen2D(canv)
# peasy.beginHUD()
blendMode(REPLACE); image(pg, 0, 0)
magnifier.display(pg, 0, height - magnifier.h)
fpx = param.focus_pos[0] * width
fpy = (1 - param.focus_pos[1]) * height
blendMode(EXCLUSION); strokeCap(PROJECT); stroke(CROSS_COL)
line(fpx - CROSS_S, fpy, fpx + CROSS_S, fpy)
line(fpx, fpy - CROSS_S, fpx, fpy + CROSS_S)
blendMode(BLEND)
# peasy.endHUD()
DwUtils.endScreen2D(canv)
def resizeScreen():
global pg_render, pg_dof, pg_tmp
w = width; h = height
perspective(RAD60, float(w)/h, 2, ZFAR)
peasy.feed()
happened = resized[0] = False
pg_render = DwUtils.changeTextureSize(this, pg_render, w, h, 8, resized)
happened |= resized[0]
resized[0] = False
pg_dof = DwUtils.changeTextureSize(this, pg_dof, w, h, 0, resized)
happened |= resized[0]
resized[0] = False
pg_tmp = DwUtils.changeTextureSize(this, pg_tmp, w, h, 0, resized,
GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT)
# geombuffer.update(pg_render)
happened |= geombuffer.resize(pg_render.width, pg_render.height)
geombuffer.pg_geom.beginDraw()
# geombuffer.updateMatrices(pg_render)
DwUtils.copyMatrices(pg_render, geombuffer.pg_geom)
geombuffer.pg_geom.blendMode(REPLACE)
geombuffer.pg_geom.clear()
geombuffer.pg_geom.shader(geombuffer.shader)
geombuffer.pg_geom.noStroke()
geombuffer.scene_display.display(geombuffer.pg_geom)
geombuffer.pg_geom.endDraw()
return happened | resized[0]
def displaySceneWrap(canvas):
DwUtils.copyMatrices(canv, canvas)
canvas.beginDraw()
canvas.background(2)
displayScene(canvas)
canvas.endDraw()
def displayScene(canvas):
canvas.directionalLight(255, 255, 255, 200, 600, 400)
canvas.directionalLight(255, 255, 255, -200, -600, -400)
canvas.ambientLight(64, 64, 64)
if canvas is geombuffer.pg_geom:
canvas.background(-1)
canvas.pgl.clearColor(1, 1, 1, ZFAR)
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT)
global shp_scene
if not shp_scene: shp_scene = makeShape()
canvas.shape(shp_scene)
def makeShape():
scene = createShape(GROUP)
FIXED_SEED and randomSeed(SEED)
with pushStyle():
colorMode(HSB, 360, 1, 1); noStroke()
for i in BOX_RANGE:
px = random(XMIN, XMAX); py = random(YMIN, YMAX)
sx = random(BOX_DIAM, BOX_DIAM); sy = random(BOX_DIAM, BOX_DIAM)
sz = random(ZMIN, ZMAX)
fill(random(-45, 45), 1, random(.1, 1))
shp_box = createShape(BOX, sx, sy, sz)
shp_box.translate(px, py, sz*.5)
scene.addChild(shp_box)
for i in SPH_RANGE:
px = random(XMIN, XMAX); py = random(YMIN, YMAX)
pz = random(ZMIN, ZMAX); rr = random(SPH_MIN_D, SPH_MAX_D)
fill(random(205, 245), 1, random(.1, 1))
shp_sphere = createShape(PShape.GEOMETRY)
shp_sphere.scale(rr); shp_sphere.translate(px, py, pz)
scene.addChild(shp_sphere)
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_smooth, 1, 4, True)\
if i&1 else\
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_facets, 1, 4, False)
fill(BASE_COL)
scene.addChild(createShape(RECT, BB_COORD, BB_COORD, BB_DIAM, BB_DIAM))
return scene
def clearFormatter(f): f.out().setLength(0)
def setTitle():
clearFormatter(formatter)
surf.title = formatter.format(TITLE, frameRate).toString()
def printCam():
pos = peasy.position; rot = peasy.rotations
lat = peasy.getLookAt(); dis = peasy.distance
clearFormatter(formatter)
print formatter.\
format(POSITION, *pos).format(ROTATION, *rot).\
format(LOOK__AT, *lat).format(DISTANCE, dis)
Hi @solub! It took a long time, but I've just finished refactoring "Depth_of_Field.pde". #:-S
Now that I've reorganized this sketch, I'm ready to convert it to a ".pyde" file. :)>-
Just w8 a lil' more. Stay w/ the latest ".pde" file for now: :-\"
/**
* Depth of Field (DoF) (1.20)
* Thomas Diewald (diwi) (2017-Oct-07)
* GitHub.com/diwi/PixelFlow/blob/master/examples/Miscellaneous/
* DepthOfField_Demo/DepthOfField_Demo.java
* Refactor by GoToLoop (v1.4.2) (2018-May-18) (PDE v3.3.5)
* Forum.Processing.org/two/discussion/27905/converting-java-code-to-python#Item_18
*/
import com.thomasdiewald.pixelflow.java.DwPixelFlow;
import com.thomasdiewald.pixelflow.java.geometry.DwIndexedFaceSetAble;
import com.thomasdiewald.pixelflow.java.geometry.DwCube;
import com.thomasdiewald.pixelflow.java.geometry.DwMeshUtils;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DepthOfField;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DwFilter;
import com.thomasdiewald.pixelflow.java.render.skylight.DwSceneDisplay;
import com.thomasdiewald.pixelflow.java.render.skylight.DwScreenSpaceGeometryBuffer;
import com.thomasdiewald.pixelflow.java.utils.DwMagnifier;
import com.thomasdiewald.pixelflow.java.utils.DwUtils;
import peasy.PeasyCam;
import com.jogamp.opengl.GL2;
import static java.util.Locale.ENGLISH;
import java.util.Formatter;
final Formatter formatter = new Formatter(ENGLISH);
static final String POSITION = "position: (%8.2f, %8.2f, %8.2f)\n";
static final String ROTATION = "rotation: (%8.2f, %8.2f, %8.2f)\n";
static final String LOOK__AT = "look-at: (%8.2f, %8.2f, %8.2f)\n";
static final String DISTANCE = "distance: (%8.2f)\n";
final String TITLE = getClass().getName() + " [fps %6.2f]";
static final int BB_SIZE = 800, BB_OFFSET = BB_SIZE >> 2;
static final int BB_TOTAL = BB_SIZE + BB_OFFSET;
static final int BB_COORD = -BB_TOTAL, BB_DIAM = BB_TOTAL << 1;
static final int XMIN = -BB_SIZE, XMAX = BB_SIZE;
static final int YMIN = -BB_SIZE, YMAX = BB_SIZE;
static final int ZMIN = 0, ZMAX = BB_SIZE;
static final int BOX_DIAM = BB_OFFSET + BB_OFFSET/20;
static final int SPH_MIN_D = BB_OFFSET >> 2, SPH_MAX_D = BB_OFFSET >> 1;
static final int BOXES = 50, SPHERES = 50;
static final int CROSS_S = 10, ZFAR = 6000;
static final int MULT_BLUR = 30, BLUR_POW = (int) pow(MULT_BLUR, 1/3.0);
static final float RAD60 = 60*DEG_TO_RAD, FPS = 60;
static final color BASE_COL = 0x80FFFFFF, CROSS_COL = 0xd0FFFFFF;
static final long SEED = 0;
static final boolean FIXED_SEED = false;
static final boolean FULLSCREEN = false, RESIZABLE = false;
boolean apply_dof = false, alt_render = false;
final boolean[] resized = new boolean[1];
final DwIndexedFaceSetAble cube_smooth = new DwCube(4), cube_facets = new DwCube(2);
PGraphics3D pg_render, pg_dof, pg_tmp;
PShape shp_scene;
PeasyCam peasy;
DwPixelFlow context;
DwFilter dw_filter;
DepthOfField dof;
DwScreenSpaceGeometryBuffer geombuffer;
DwMagnifier magnifier;
void settings() {
if (FULLSCREEN) fullScreen(P3D);
else size(displayWidth*9/10, displayHeight*9/10, P3D);
noSmooth();
}
void setup() {
frameRate(FPS);
cursor(CROSS);
if (RESIZABLE) getSurface().setResizable(true);
getSurface().setLocation(displayWidth - width >> 1, 8);
peasy = new PeasyCam(this, -4.083, -6.096, 7, 2000);
peasy.setRotations(1.085, -.477, 2.91);
dw_filter = DwFilter.get(context = new DwPixelFlow(this));
context.print();
context.printGL();
dof = new DepthOfField(context);
dof.param.mult_blur = MULT_BLUR;
final DwSceneDisplay scene_display = new DwSceneDisplay() {
@ Override final public void display(final PGraphics3D canvas) {
displayScene(canvas);
}
};
geombuffer = new DwScreenSpaceGeometryBuffer(context, scene_display);
final int mag_h = height/3;
magnifier = new DwMagnifier(this, 4, 0, height - mag_h, mag_h, mag_h);
}
void draw() {
final PGraphics canv = getGraphics();
final DepthOfField.Param param = dof.param;
setTitle();
resizeScreen();
displaySceneWrap(pg_render, canv);
dw_filter.gamma.apply(pg_render, pg_render);
if (apply_dof) applyDoF(param);
renderScene(param, canv);
}
void keyPressed() {
final int k = keyCode;
if (k == ENTER | k == RETURN) shp_scene = null;
else if (k == 'C' | k == CONTROL) printCam();
else if (k == 'P' | k == BACKSPACE) looping ^= true;
else if (k == ' ') apply_dof ^= true;
else if (k == SHIFT) alt_render ^= true;
}
void applyDoF(final DepthOfField.Param param) {
final PGraphicsOpenGL geom = geombuffer.pg_geom;
dw_filter.gaussblur.apply(geom, geom, pg_tmp, BLUR_POW);
param.focus_pos[0] = map(mouseX + .5, 0, width, 00, 1);
param.focus_pos[1] = map(mouseY + .5, 0, height, 1, 0);
dof.apply(pg_render, pg_dof, geombuffer);
dw_filter.copy.apply(pg_dof, pg_render);
}
void renderScene(final DepthOfField.Param param, final PGraphics canv) {
final PGraphics pg = alt_render? geombuffer.pg_geom : pg_render;
magnifier.apply(pg, mouseX, mouseY);
magnifier.displayTool();
DwUtils.beginScreen2D(canv);
//peasy.beginHUD();
blendMode(REPLACE);
image(pg, 0, 0);
magnifier.display(pg, 0, height - magnifier.h);
final float fpx = param.focus_pos[0] * width;
final float fpy = (1 - param.focus_pos[1]) * height;
blendMode(EXCLUSION);
strokeCap(PROJECT);
stroke(CROSS_COL);
line(fpx - CROSS_S, fpy, fpx + CROSS_S, fpy);
line(fpx, fpy - CROSS_S, fpx, fpy + CROSS_S);
blendMode(BLEND);
//peasy.endHUD();
DwUtils.endScreen2D(canv);
}
boolean resizeScreen() { // dynamically resize render-targets
final int w = width, h = height;
perspective(RAD60, (float) w/h, 2, ZFAR);
peasy.feed();
boolean happened = resized[0] = false;
pg_render = DwUtils.changeTextureSize(this, pg_render, w, h, 8, resized);
happened |= resized[0];
resized[0] = false;
pg_dof = DwUtils.changeTextureSize(this, pg_dof, w, h, 0, resized);
happened |= resized[0];
resized[0] = false;
pg_tmp = DwUtils.changeTextureSize(this, pg_tmp, w, h, 0, resized,
GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT);
geombuffer.update(pg_render);
return happened | resized[0];
}
void displaySceneWrap(final PGraphics3D canvas, final PGraphics canv) {
DwUtils.copyMatrices((PGraphicsOpenGL) canv, canvas);
canvas.beginDraw();
canvas.background(2);
displayScene(canvas);
canvas.endDraw();
}
void displayScene(final PGraphics3D canvas) {
canvas.directionalLight(255, 255, 255, 200, 600, 400);
canvas.directionalLight(255, 255, 255, -200, -600, -400);
canvas.ambientLight(64, 64, 64);
if (canvas == geombuffer.pg_geom) {
canvas.background(-1);
canvas.pgl.clearColor(1, 1, 1, ZFAR);
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT);
}
if (shp_scene == null) shp_scene = makeShape();
canvas.shape(shp_scene);
}
PShape makeShape() {
final PShape scene = createShape(GROUP);
pushStyle();
colorMode(HSB, 360, 1, 1);
noStroke();
if (FIXED_SEED) randomSeed(SEED);
for (int i = 0; i < BOXES; ++i) {
final float px = random(XMIN, XMAX), py = random(YMIN, YMAX);
final float sx = random(BOX_DIAM, BOX_DIAM), sy = random(BOX_DIAM, BOX_DIAM);
final float sz = random(ZMIN, ZMAX);
fill(random(-45, 45), 1, random(.1, 1));
final PShape shp_box = createShape(BOX, sx, sy, sz);
shp_box.translate(px, py, sz*.5);
scene.addChild(shp_box);
}
for (int i = 0; i < SPHERES; ++i) {
final float px = random(XMIN, XMAX), py = random(YMIN, YMAX);
final float pz = random(ZMIN, ZMAX), rr = random(SPH_MIN_D, SPH_MAX_D);
fill(random(205, 245), 1, random(.1, 1));
final PShape shp_sphere = createShape(PShape.GEOMETRY);
shp_sphere.scale(rr);
shp_sphere.translate(px, py, pz);
scene.addChild(shp_sphere);
if ((i&1) == 0)
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_facets, 1, 4, false);
else
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_smooth, 1, 4, true);
}
fill(BASE_COL);
scene.addChild(createShape(RECT, BB_COORD, BB_COORD, BB_DIAM, BB_DIAM));
popStyle();
return scene;
}
static final void clearFormatter(final Formatter f) {
((StringBuilder) f.out()).setLength(0);
}
void setTitle() {
clearFormatter(formatter);
getSurface().setTitle(formatter.format(TITLE, frameRate).toString());
}
void printCam() {
final float[] pos = peasy.getPosition();
final float[] rot = peasy.getRotations();
final float[] lat = peasy.getLookAt();
final double dis = peasy.getDistance();
clearFormatter(formatter);
println(formatter.
format(POSITION, pos[0], pos[1], pos[2]).
format(ROTATION, rot[0], rot[1], rot[2]).
format(LOOK__AT, lat[0], lat[1], lat[2]).
format(DISTANCE, dis));
}
I'm back with another question, sorry. I still have a persistent issue with the resizeScreen()
function and more particularly with thepg_render
and pg_tmp
grahics buffers variables.
When running the .pyde script I get the following error messages:
GammaCorrection.apply shader | GL_ERROR: invalid operation
GammaCorrection.apply | GL_ERROR: invalid operation
GammaCorrection.apply | GL_ERROR: invalid framebuffer operation
This occurs at line 110 (Java script) or 58 (Python version):
DwFilter.get(context).gamma.apply(pg_render, pg_render)
Do you know what could be the problem here ?
Here below, for comparison purposes:
Java
import java.util.Locale;
import com.jogamp.opengl.GL2;
import com.thomasdiewald.pixelflow.java.DwPixelFlow;
import com.thomasdiewald.pixelflow.java.geometry.DwCube;
import com.thomasdiewald.pixelflow.java.geometry.DwMeshUtils;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DepthOfField;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DwFilter;
import com.thomasdiewald.pixelflow.java.render.skylight.DwSceneDisplay;
import com.thomasdiewald.pixelflow.java.render.skylight.DwScreenSpaceGeometryBuffer;
import com.thomasdiewald.pixelflow.java.utils.DwMagnifier;
import com.thomasdiewald.pixelflow.java.utils.DwUtils;
import peasy.*;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PShape;
import processing.opengl.PGL;
import processing.opengl.PGraphics3D;
boolean START_FULLSCREEN = !true;
int viewport_w = 1280;
int viewport_h = 720;
int viewport_x = 230;
int viewport_y = 0;
// camera control
PeasyCam peasycam;
// library context
DwPixelFlow context;
PGraphics3D pg_render;
PGraphics3D pg_dof;
PGraphics3D pg_tmp;
DepthOfField dof;
DwScreenSpaceGeometryBuffer geombuffer;
boolean APPLY_DOF = true;
public void settings() {
if(START_FULLSCREEN){
viewport_w = displayWidth;
viewport_h = displayHeight;
viewport_x = 0;
viewport_y = 0;
fullScreen(P3D);
} else {
size(viewport_w, viewport_h, P3D);
}
smooth(0);
}
public void setup() {
// camera
peasycam = new PeasyCam(this, -4.083, -6.096, 7.000, 1300);
peasycam.setRotations( 1.085, -0.477, 2.910);
// main library context
context = new DwPixelFlow(this);
context.print();
context.printGL();
// callback for scene display (used in GBAA)
DwSceneDisplay scene_display = new DwSceneDisplay() {
@Override
public void display(PGraphics3D canvas) {
displayScene(canvas);
}
};
geombuffer = new DwScreenSpaceGeometryBuffer(context, scene_display);
dof = new DepthOfField(context);
frameRate(1000);
}
// dynamically resize render-targets
public boolean resizeScreen(){
boolean[] RESIZED = {false};
pg_render = DwUtils.changeTextureSize(this, pg_render, width, height, 8, RESIZED);
pg_dof = DwUtils.changeTextureSize(this, pg_dof , width, height, 0, RESIZED);
pg_tmp = DwUtils.changeTextureSize(this, pg_tmp , width, height, 0, RESIZED, GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT);
peasycam.feed();
perspective(60 * DEG_TO_RAD, width/(float)height, 2, 6000);
return RESIZED[0];
}
public void draw() {
resizeScreen();
displaySceneWrap(pg_render);
DwFilter.get(context).gamma.apply(pg_render, pg_render);
int mult_blur = 30;
geombuffer.update(pg_render);
DwFilter.get(context).gaussblur.apply(geombuffer.pg_geom, geombuffer.pg_geom, pg_tmp, (int) Math.pow(mult_blur, 0.33f));
//// dof.param.focus = map(mouseX, 0, width, 0, 1);
dof.param.focus_pos = new float[]{0.5f, 0.5f};
dof.param.focus_pos[0] = map(mouseX+0.5f, 0, width , 0, 1);
dof.param.focus_pos[1] = map(mouseY+0.5f, 0, height, 1, 0);
dof.param.mult_blur = mult_blur;
dof.apply(pg_render, pg_dof, geombuffer);
DwFilter.get(context).copy.apply(pg_dof, pg_render);
DwUtils.beginScreen2D(g);
{
blendMode(REPLACE);
clear();
image(pg_render, 0, 0);
}
DwUtils.endScreen2D(g);
}
public void displaySceneWrap(PGraphics3D canvas){
canvas.beginDraw();
DwUtils.copyMatrices((PGraphics3D) this.g, canvas);
// background
canvas.blendMode(PConstants.BLEND);
canvas.background(2);
displayScene(canvas);
canvas.endDraw();
}
// render something
public void displayScene(PGraphics3D canvas){
// lights
canvas.directionalLight(255, 255, 255, 200,600,400);
canvas.directionalLight(255, 255, 255, -200,-600,-400);
canvas.ambientLight(64, 64, 64);
if(canvas == geombuffer.pg_geom){
canvas.background(255, 255);
canvas.pgl.clearColor(1, 1, 1, 6000);
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT);
}
sceneShape(canvas);
}
PShape shp_scene;
public void sceneShape(PGraphics3D canvas){
if(shp_scene != null){
canvas.shape(shp_scene);
return;
}
shp_scene = createShape(GROUP);
int num_spheres = 50;
float bb_size = 800;
float xmin = -bb_size;
float xmax = +bb_size;
float ymin = -bb_size;
float ymax = +bb_size;
float zmin = 0;
float zmax = +bb_size;
colorMode(HSB, 360, 1, 1);
DwCube cube_smooth = new DwCube(4);
DwCube cube_facets = new DwCube(2);
for(int i = 0; i < num_spheres; i++){
float px = random(xmin, xmax);
float py = random(ymin, ymax);
float pz = random(zmin, zmax);
float rr = random(50) + 50;
boolean facets = true;//(i%2 == 0);
float off = 20;
float base = 225;
float hsb_h = base + random(-off,off);
float hsb_s = 1;
float hsb_b = random(0.1f,1.0f);
int shading = color(hsb_h, hsb_s, hsb_b);
PShape shp_sphere = createShape(PShape.GEOMETRY);
if(facets){
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_facets, 1, 4, false);
} else {
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_smooth, 1, 4, true);
}
shp_sphere.setStroke(!true);
shp_sphere.setStroke(color(0));
shp_sphere.setStrokeWeight(0.01f / rr);
shp_sphere.setFill(true);
shp_sphere.setFill(shading);
shp_sphere.resetMatrix();
shp_sphere.scale(rr);
shp_sphere.translate(px, py, pz);
shp_scene.addChild(shp_sphere);
}
}
Python
add_library('PixelFlow')
add_library('peasycam')
from com.jogamp.opengl import GL2
import java.util.Locale
liste = []
viewport_w = 1280
viewport_h = 720
viewport_x = 0
viewport_y = 0
FS = False
def settings():
global viewport_w, viewport_h
if FS:
viewport_w = displayWidth
viewport_h = displayHeight
viewport_x = 0
viewport_y = 0
fullScreen(P3D)
else:
size(viewport_w, viewport_h, P3D)
smooth(0)
def setup():
global context, scene_display, geombuffer, dof, cam
cam = PeasyCam(this, -4.083, -6.096, 7.000, 1300)
context = DwPixelFlow(this)
context.print()
context.printGL()
scene_display = MySceneDisplay()
geombuffer = DwScreenSpaceGeometryBuffer(context, scene_display)
dof = DepthOfField(context)
def resizeScreen():
global pg_render, pg_dof, pg_tmp
RESIZED = [False]
pg_render = DwUtils.changeTextureSize(this, None, width, height, 8, RESIZED)
pg_dof = DwUtils.changeTextureSize(this, None, width, height, 0, RESIZED)
pg_tmp = DwUtils.changeTextureSize(this, None, width, height, 0, RESIZED, GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT)
cam.feed()
perspective(60 * DEG_TO_RAD, width/float(height), 2, 6000)
return RESIZED[0]
def draw():
resizeScreen()
displaySceneWrap(pg_render)
DwFilter.get(context).gamma.apply(pg_render, pg_render)
mult_blur = 30
geombuffer.update(pg_render)
DwFilter.get(context).gaussblur.apply(geombuffer.pg_geom, geombuffer.pg_geom, pg_tmp, int(Math.pow(mult_blur, 0.33)))
dof.param.focus_pos = float(0.5, 0.5)
dof.param.focus_pos[0] = map(mouseX+0.5, 0, width, 0, 1)
dof.param.focus_pos[1] = map(mouseY+0.5, 0, height, 1, 0)
dof.param.mult_blur = mult_blur
dof.apply(pg_render, pg_dof, geombuffer)
DwFilter.get(context).copy.apply(pg_dof, pg_render)
DwUtils.beginScreen2D(g)
blendMode(REPLACE)
clear()
image(pg.render,0,0)
DwUtils.endScreen2D(g)
def displaySceneWrap(canvas):
canvas.beginDraw()
DwUtils.copyMatrices(this.g, canvas)
canvas.blendMode(PConstants.BLEND)
canvas.background(2)
displayScene(canvas)
canvas.endDraw()
def displayScene(canvas):
canvas.directionalLight(255, 255, 255, 200,600,400)
canvas.directionalLight(255, 255, 255, -200,-600,-400)
canvas.ambientLight(64, 64, 64)
if canvas == geombuffer.pg_geom:
canvas.background(255, 255)
canvas.pgl.clearColor(1, 1, 1, 6000)
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT)
sceneShape(canvas)
def sceneShape(canvas):
shp_scene = createShape(GROUP)
if shp_scene != None:
canvas.shape(shp_scene)
return
num_spheres = 50
bb_size = 800
xmin = -bb_size
xmax = +bb_size
ymin = -bb_size
ymax = +bb_size
zmin = 0
zmax = +bb_size
colorMode(HSB, 360, 1, 1)
cube_smooth = DwCube(4)
cube_facets = DwCube(2)
for i in range(num_spheres):
px = random(xmin, xmax)
py = random(ymin, ymax)
pz = random(zmin, zmax)
facets = True
off = 20
base =225
hsb_h = base + random(-off, off)
hsb_s = 1
hsb_b = random(0.1, 1.0)
shading = color(hsb_h, hsb_s, hsb_b)
shp_sphere = createShape(PShape.GEOMETRY)
if facets:
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_facets, 1, 4, False)
else:
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_smooth, 1, 4, True)
shp_sphere.setStroke(False);
shp_sphere.setStroke(color(0));
shp_sphere.setStrokeWeight(0.01 / rr);
shp_sphere.setFill(True);
shp_sphere.setFill(shading);
shp_sphere.resetMatrix();
shp_sphere.scale(rr);
shp_sphere.translate(px, py, pz);
shp_scene.addChild(shp_sphere);
class MySceneDisplay(DwSceneDisplay):
def display(_, canvas): displayScene(canvas)
I wonder if you 1st was able to transpile back the ".java" sketch as a ".pde" in order to run it under Java Mode? :-?
package
keyword. public class DepthOfField_Demo extends PApplet {
statement & its corresponding closing curly brace. public static void main(String args[]) {
code block. #:-S That whole code is æsthetically messy. But here's what I've come w/ as a ".pde" file w/o changing the original ".java" 1 much: :P
"Depth_of_Field.pde":
// Depth of Field (DoF) (1.20)
// Thomas Diewald (diwi) (2017-Oct-07)
// GitHub.com/diwi/PixelFlow/blob/master/examples/Miscellaneous/
// DepthOfField_Demo/DepthOfField_Demo.java
import static java.util.Locale.ENGLISH;
import com.jogamp.opengl.GL2;
import peasy.PeasyCam;
import com.thomasdiewald.pixelflow.java.DwPixelFlow;
import com.thomasdiewald.pixelflow.java.geometry.DwCube;
import com.thomasdiewald.pixelflow.java.geometry.DwMeshUtils;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DepthOfField;
import com.thomasdiewald.pixelflow.java.imageprocessing.filter.DwFilter;
import com.thomasdiewald.pixelflow.java.render.skylight.DwSceneDisplay;
import com.thomasdiewald.pixelflow.java.render.skylight.DwScreenSpaceGeometryBuffer;
import com.thomasdiewald.pixelflow.java.utils.DwMagnifier;
import com.thomasdiewald.pixelflow.java.utils.DwUtils;
static final String POSITION = "position: (%7.3f, %7.3f, %7.3f)\n";
static final String ROTATION = "rotation: (%7.3f, %7.3f, %7.3f)\n";
static final String LOOK_AT = "look-at: (%7.3f, %7.3f, %7.3f)\n";
static final String DISTANCE = "distance: (%7.3f)\n";
static final String FPS = " [fps %6.2f]";
boolean start_fullscreen = false;
int viewport_w = 1000;
int viewport_h = 600;
int viewport_x = 200;
int viewport_y = 0;
// camera control
PeasyCam peasycam;
// library context
DwPixelFlow context;
PShape shp_scene;
PGraphics3D pg_render;
PGraphics3D pg_dof;
PGraphics3D pg_tmp;
DepthOfField dof;
DwScreenSpaceGeometryBuffer geombuffer;
DwMagnifier magnifier;
boolean apply_dof = true;
void settings() {
if (!start_fullscreen) size(viewport_w, viewport_h, P3D);
else {
fullScreen(P3D);
viewport_w = displayWidth;
viewport_h = displayHeight;
viewport_x = 0;
viewport_y = 0;
}
noSmooth();
}
void setup() {
surface.setResizable(true);
surface.setLocation(viewport_x, viewport_y);
// camera
peasycam = new PeasyCam(this, -4.083, -6.096, 7.000, 1300);
peasycam.setRotations(1.085, -0.477, 2.910);
// main library context
context = new DwPixelFlow(this);
context.print();
context.printGL();
// callback for scene display (used in GBAA)
DwSceneDisplay scene_display = new DwSceneDisplay() {
@ Override public void display(PGraphics3D canvas) {
displayScene(canvas);
}
};
geombuffer = new DwScreenSpaceGeometryBuffer(context, scene_display);
dof = new DepthOfField(context);
int mag_h = height/3;
magnifier = new DwMagnifier(this, 4, 0, height - mag_h, mag_h, mag_h);
frameRate(1000);
}
void draw() {
resizeScreen();
displaySceneWrap(pg_render);
DwFilter.get(context).gamma.apply(pg_render, pg_render);
int mult_blur = 30;
if (apply_dof) {
geombuffer.update(pg_render);
DwFilter.get(context).gaussblur.apply(geombuffer.pg_geom, geombuffer.pg_geom,
pg_tmp, (int) Math.pow(mult_blur, 0.33));
// dof.param.focus = map(mouseX, 0, width, 0, 1);
dof.param.focus_pos = new float[]{0.5, 0.5};
dof.param.focus_pos[0] = map(mouseX+0.5, 0, width, 0, 1);
dof.param.focus_pos[1] = map(mouseY+0.5, 0, height, 1, 0);
dof.param.mult_blur = mult_blur;
dof.apply(pg_render, pg_dof, geombuffer);
DwFilter.get(context).copy.apply(pg_dof, pg_render);
}
magnifier.apply(pg_render, mouseX, mouseY);
magnifier.displayTool();
DwUtils.beginScreen2D(g);
// peasycam.beginHUD();
{
blendMode(REPLACE);
clear();
image(pg_render, 0, 0);
// image(geombuffer.pg_geom, 0, 0);
magnifier.display(g, 0, height-magnifier.h);
blendMode(BLEND);
pushMatrix();
float cursor_s = 10;
float fpx = dof.param.focus_pos[0] * width;
float fpy = (1.0 - dof.param.focus_pos[1]) * height;
blendMode(EXCLUSION);
translate(fpx, fpy);
strokeWeight(1);
stroke(255, 200);
line(-cursor_s, 0, +cursor_s, 0);
line(0, -cursor_s, 0, +cursor_s);
blendMode(BLEND);
popMatrix();
}
// peasycam.endHUD();
DwUtils.endScreen2D(g);
String txt_fps = String.format(getClass().getName() + FPS, frameRate);
surface.setTitle(txt_fps);
}
void keyReleased() {
if (keyCode == 'C') printCam();
else if (key == ' ') apply_dof = !apply_dof;
}
boolean resizeScreen() { // dynamically resize render-targets
final boolean[] resized = { false };
pg_render = DwUtils.changeTextureSize(this, pg_render, width, height, 8, resized);
pg_dof = DwUtils.changeTextureSize(this, pg_dof, width, height, 0, resized);
pg_tmp = DwUtils.changeTextureSize(this, pg_tmp, width, height, 0, resized,
GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT);
// geombuffer.resize(width, height)
if (resized[0]) {
// nothing here
}
peasycam.feed();
perspective(60 * DEG_TO_RAD, width/(float)height, 2, 6000);
return resized[0];
}
void displaySceneWrap(PGraphics3D canvas) {
canvas.beginDraw();
DwUtils.copyMatrices((PGraphics3D) this.g, canvas);
canvas.blendMode(PConstants.BLEND);
canvas.background(2);
displayScene(canvas);
canvas.endDraw();
}
void displayScene(PGraphics3D canvas) {
canvas.directionalLight(255, 255, 255, 200, 600, 400);
canvas.directionalLight(255, 255, 255, -200, -600, -400);
canvas.ambientLight(64, 64, 64);
if (canvas == geombuffer.pg_geom) {
canvas.background(255, 255);
canvas.pgl.clearColor(1, 1, 1, 6000);
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT);
}
sceneShape(canvas);
}
void sceneShape(PGraphics3D canvas) {
if (shp_scene != null) {
canvas.shape(shp_scene);
return;
}
shp_scene = createShape(GROUP);
int num_boxes = 50;
int num_spheres = 50;
float bb_size = 800;
float xmin = -bb_size;
float xmax = +bb_size;
float ymin = -bb_size;
float ymax = +bb_size;
float zmin = 0;
float zmax = +bb_size;
colorMode(HSB, 360, 1, 1);
randomSeed(0);
for (int i = 0; i < num_boxes; i++) {
float px = random(xmin, xmax);
float py = random(ymin, ymax);
float sx = random(200) + 10;
float sy = random(200) + 10;
float sz = random(zmin, zmax);
float off = 45;
float base = 0;
float hsb_h = base + random(-off, off);
float hsb_s = 1;
float hsb_b = random(0.1, 1.0);
int shading = color(hsb_h, hsb_s, hsb_b);
PShape shp_box = createShape(BOX, sx, sy, sz);
shp_box.setFill(true);
shp_box.setStroke(false);
shp_box.setFill(shading);
shp_box.translate(px, py, sz*.5);
shp_scene.addChild(shp_box);
}
DwCube cube_smooth = new DwCube(4);
DwCube cube_facets = new DwCube(2);
for (int i = 0; i < num_spheres; i++) {
float px = random(xmin, xmax);
float py = random(ymin, ymax);
float pz = random(zmin, zmax);
float rr = random(50) + 50;
boolean facets = true;//(i%2 == 0);
float off = 20;
float base = 225;
float hsb_h = base + random(-off, off);
float hsb_s = 1;
float hsb_b = random(0.1, 1.0);
int shading = color(hsb_h, hsb_s, hsb_b);
PShape shp_sphere = createShape(PShape.GEOMETRY);
if (facets) {
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_facets, 1, 4, false);
} else {
DwMeshUtils.createPolyhedronShape(shp_sphere, cube_smooth, 1, 4, true);
}
shp_sphere.setStroke(!true);
shp_sphere.setStroke(color(0));
shp_sphere.setStrokeWeight(0.01 / rr);
shp_sphere.setFill(true);
shp_sphere.setFill(shading);
shp_sphere.resetMatrix();
shp_sphere.scale(rr);
shp_sphere.translate(px, py, pz);
shp_scene.addChild(shp_sphere);
}
colorMode(RGB, 255, 255, 255);
PShape shp_rect = createShape(RECT, -1000, -1000, 2000, 2000);
shp_rect.setStroke(false);
shp_rect.setFill(true);
shp_rect.setFill(color(255));
shp_scene.addChild(shp_rect);
}
PShape createGridXY(int lines, float s) {
PShape shp_gridxy = createShape();
shp_gridxy.beginShape(LINES);
shp_gridxy.stroke(0);
shp_gridxy.strokeWeight(1);
float d = lines*s;
for (int i = 0; i <= lines; i++) {
shp_gridxy.vertex(-d, -i*s, 0);
shp_gridxy.vertex(d, -i*s, 0);
shp_gridxy.vertex(-d, +i*s, 0);
shp_gridxy.vertex(d, +i*s, 0);
shp_gridxy.vertex(-i*s, -d, 0);
shp_gridxy.vertex(-i*s, d, 0);
shp_gridxy.vertex(+i*s, -d, 0);
shp_gridxy.vertex(+i*s, d, 0);
}
shp_gridxy.endShape();
return shp_gridxy;
}
void printCam() {
float[] pos = peasycam.getPosition();
float[] rot = peasycam.getRotations();
float[] lat = peasycam.getLookAt();
float dis = (float) peasycam.getDistance();
System.out.printf(ENGLISH, POSITION, pos[0], pos[1], pos[2]);
System.out.printf(ENGLISH, ROTATION, rot[0], rot[1], rot[2]);
System.out.printf(ENGLISH, LOOK_AT, lat[0], lat[1], lat[2]);
System.out.printf(ENGLISH, DISTANCE, dis);
}
Thank you for pointing out this omission. Unfortunately, I'm still stuck on line 43:
for some reason geombuffer.update(pg_render)
prevents the sketch from running correctly. I suspect pg_render
not to be correctly instantiated...
add_library('PixelFlow')
add_library('peasycam')
from com.jogamp.opengl import GL2
import java.util.Locale
liste = []
def setup():
global geombuffer, context, scene_display, dof, magnifier, pg_render, pg_dof, pg_tmp
size(800, 600, P3D)
cam = PeasyCam(this, 1000)
context = DwPixelFlow(this)
scene_display = MySceneDisplay()
geombuffer = DwScreenSpaceGeometryBuffer(context, scene_display)
dof = DepthOfField(context)
mag_h = int(height/3)
magnifier = DwMagnifier(this, 4, 0, height - mag_h, mag_h, mag_h)
pg_render = DwUtils.changeTextureSize(this, None, width, height, 8, [False])
pg_dof = DwUtils.changeTextureSize(this, None, width, height, 0, [False])
pg_tmp = DwUtils.changeTextureSize(this, None, width, height, 0, [False], GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT)
for e in range(100):
liste.append(PVector(random(width), random(height), random(height)))
cam.feed()
perspective(60 * DEG_TO_RAD, width/float(height), 2, 6000)
stroke(255)
strokeWeight(10)
def draw():
background(0)
displaySceneWrap(pg_render)
geombuffer.update(pg_render)
def displaySceneWrap(canvas):
canvas.beginDraw()
DwUtils.copyMatrices(this.g, canvas)
canvas.blendMode(PConstants.BLEND)
canvas.background(2)
displayScene(canvas)
canvas.endDraw()
def displayScene(canvas):
canvas.directionalLight(255, 255, 255, 200,600,400)
canvas.directionalLight(255, 255, 255, -200,-600,-400)
canvas.ambientLight(64, 64, 64)
if canvas == geombuffer.pg_geom:
canvas.background(255, 255)
canvas.pgl.clearColor(1, 1, 1, 6000)
canvas.pgl.clear(PGL.COLOR_BUFFER_BIT)
sceneShape(canvas)
def sceneShape(canvas):
translate(-width/2, -height/2)
for e in liste:
point(e.x, e.y, e.z)
class MySceneDisplay(DwSceneDisplay):
def display(_, canvas): displayScene(canvas)
... GL2.GL_RGBA16F, GL2.GL_RGBA, GL2.GL_FLOAT don't seem to work.
Have you imported the interface GL2 from package com.jogamp.opengl before using its constants? :-\"
http://JogAmp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GL2.html
import com.jogamp.opengl.GL2;
--> from com.jogamp.opengl import GL2
(because there's no such thing as
PGraphics3D pg_render;
in Python)
PGraphics3D is the declared datatype which variable pg_render accepts to be assigned w/ under Java.
Under Python however, variables hold any datatype reference. No restriction at all! 8->
Under Java, all reference datatype fields are initialized w/ null
by default. ~O)
Under Python, simply assign them w/ None
in order to have the same default behavior. :\">
PGraphics3D pg_render;
--> pg_render = None
Take a look at the link below in order to learn the default initial value for each Java datatype: ~O)
https://Docs.Oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Hi
gl_FragCoord.z / gl_FragCoord.w
would be nice if it would be that easy.
this is serious math i save for a rainy, lonely sunday.
https://stackoverflow.com/a/13731548
Modern OpenGL has actualy build in functions like a precalculated Depth Texture, also gl_FragDepth will saves some headache. In native JOGL mode with modern Hardware, i can image, - it could be done. (Also thinking of times when people has to calculate Perspective-Correct Texture Mapping and such things ...)
Reimplement the hole thing is paintful, but yes and some point, - and also in mind of backward compatibility, i think, people had to do it in in someway, unfortunately i can't find some good copy +paste examples.
What you can do is experiment on the CPU and then paste your code to the shader GPU version.
Don't forget to share your results : )
Good Luck.
// forum.processing.org/two/discussion/comment/122724
// based on:
// Alasdair Turner 2009
// openprocessing.org/sketch/2950#
import com.jogamp.opengl.GL2ES2;
import com.jogamp.opengl.util.GLBuffers;
import java.nio.FloatBuffer;
GL2ES2 gl;
FloatBuffer zbuff;
void setup() {
size(640, 360, P3D);
noStroke();
zbuff = GLBuffers.newDirectFloatBuffer(new float[]{1f});
}
void draw() {
float aspect = float(width)/float(height);
float fovy =PI/3.;
float cameraZ =(height/2.0) / tan(degrees(fovy)*PI / 360.0);
float zNear = cameraZ/10.0;
float zFar=cameraZ*10.0;
// processings default ?
// processing.org/reference/camera_.html
// processing.org/reference/perspective_.html
// perspective(fovy, aspect, zNear, zFar);
// camera(width/2, height/2, cameraZ, width/2, height/2, 0, 0, 1, 0);
// printCamera();
background(203);
lights();
pushMatrix();
translate(width/2.0, height/2.0, -100. );
fill(155);
box(200, 100, 0.1 );
fill(255);
sphere(50);
popMatrix();
gl = ((PJOGL) beginPGL()).gl.getGL2ES2();
endPGL();
// not optimatl but enough for your porposes
// khronos.org/opengl/wiki/Common_Mistakes#Depth_Buffer_Precision
// note in case you want multiple objects: detph texture is native opengl means it's flipped on the y axis in jogl
gl.glReadPixels( mouseX, mouseY, 1, 1, GL2ES2.GL_DEPTH_COMPONENT, GL2ES2.GL_FLOAT, zbuff);
float z = 2.0 * ( zbuff.get(0) - 0.5f);
float worldZ = 2.0f*zFar * zNear / (z*(zFar-zNear)-(zFar+zNear) );
fill(0, 102, 153, 250);
textSize(24);
text(nf(cameraZ+worldZ, 0, 1), mouseX, mouseY);
}
Hi @gohai,
I'm sorry for my late response. I had a day off yesterday :)
Here's the output of a108bd998432b7b544ce0e1d0ad73376.
GLDebugEvent[ id 0x32
type Error
severity High: dangerous undefined behavior
source GL API
msg Error:glEnable::<cap> is not one of the accepted values
when 1524184964512
source 3.1 (ES profile, arb, debug, compat[ES2, ES3, ES31], FBO, hardware) - OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e - hash 0x1f928e9]
[2]: jogamp.opengl.GLDebugMessageHandler$StdErrGLDebugListener.messageSent(GLDebugMessageHandler.java:347)
[3]: jogamp.opengl.GLDebugMessageHandler.sendMessage(GLDebugMessageHandler.java:332)
[4]: jogamp.opengl.GLDebugMessageHandler.glDebugMessageARB(GLDebugMessageHandler.java:358)
[5]: jogamp.opengl.es3.GLES3Impl.dispatch_glEnable1(Native Method)
[6]: jogamp.opengl.es3.GLES3Impl.glEnable(GLES3Impl.java:734)
[7]: com.jogamp.opengl.DebugGLES3.glEnable(DebugGLES3.java:2121)
[8]: processing.opengl.PJOGL.enable(PJOGL.java:1068)
[9]: processing.opengl.PGraphicsOpenGL.setGLSettings(PGraphicsOpenGL.java:6784)
[10]: processing.opengl.PGraphicsOpenGL.checkSettings(PGraphicsOpenGL.java:6740)
[11]: processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1463)
[12]: processing.core.PApplet.handleDraw(PApplet.java:2388)
[13]: processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
[14]: jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
[15]: jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
[16]: jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
[17]: jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
[18]: jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
[19]: com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
[20]: com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
[21]: com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
[22]: com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
[23]: java.util.TimerThread.mainLoop(Timer.java:555)
[24]: java.util.TimerThread.run(Timer.java:505)
com.jogamp.opengl.GLException: Thread[main-FPSAWTAnimator#00-Timer0,5,main] glGetError() returned the following error codes after a call to glEnable(<int> 0x809D): GL_INVALID_ENUM ( 1280 0x500),
at com.jogamp.opengl.DebugGLES3.writeGLError(DebugGLES3.java:8241)
at com.jogamp.opengl.DebugGLES3.glEnable(DebugGLES3.java:2124)
at processing.opengl.PJOGL.enable(PJOGL.java:1068)
at processing.opengl.PGraphicsOpenGL.setGLSettings(PGraphicsOpenGL.java:6784)
at processing.opengl.PGraphicsOpenGL.checkSettings(PGraphicsOpenGL.java:6740)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1463)
at processing.core.PApplet.handleDraw(PApplet.java:2388)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
@gohai, as you instructed, I modified ~/.processing/preferences.txt and ran the following simple sketch.
void setup() {
size(300, 300, P3D);
}
void draw() {
background(0);
}
And I got the following console output:
GLDebugEvent[ id 0xb
type Error
severity High: dangerous undefined behavior
source GL API
msg Error:glGetFloatv::<pname> is not an accepted value
when 1524036153380
source 3.1 (ES profile, arb, debug, compat[ES2, ES3, ES31], FBO, hardware) - OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e - hash 0xc39cf5]
[2]: jogamp.opengl.GLDebugMessageHandler$StdErrGLDebugListener.messageSent(GLDebugMessageHandler.java:347)
[3]: jogamp.opengl.GLDebugMessageHandler.sendMessage(GLDebugMessageHandler.java:332)
[4]: jogamp.opengl.GLDebugMessageHandler.glDebugMessageARB(GLDebugMessageHandler.java:358)
[5]: jogamp.opengl.es3.GLES3Impl.dispatch_glGetFloatv1(Native Method)
[6]: jogamp.opengl.es3.GLES3Impl.glGetFloatv(GLES3Impl.java:1157)
[7]: com.jogamp.opengl.DebugGLES3.glGetFloatv(DebugGLES3.java:3260)
[8]: processing.opengl.PJOGL.getFloatv(PJOGL.java:1106)
[9]: processing.opengl.PGraphicsOpenGL.getGLParameters(PGraphicsOpenGL.java:6892)
[10]: processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1454)
[11]: processing.core.PApplet.handleDraw(PApplet.java:2388)
[12]: processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
[13]: jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
[14]: jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
[15]: jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
[16]: jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
[17]: jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
[18]: com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
[19]: com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
[20]: com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
[21]: com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
[22]: java.util.TimerThread.mainLoop(Timer.java:555)
[23]: java.util.TimerThread.run(Timer.java:505)
Can you point out what causes the error from this clue?
@gohai, it doesn't seem to work unfortunately :( Please take a look at the output.
OpenGL error 1280 at bot beginDraw(): invalid enumerant
java.lang.RuntimeException: Cannot compile fragment shader:
0:28: S0028: Expected type for precision qualifier, got 'vec2'
0:29: S0028: Expected type for precision qualifier, got 'vec3'
0:30: S0028: Expected type for precision qualifier, got 'vec4'
at processing.core.PGraphics.showException(PGraphics.java:8211)
at processing.opengl.PShader.compileFragmentShader(PShader.java:1000)
at processing.opengl.PShader.compile(PShader.java:924)
at processing.opengl.PShader.init(PShader.java:894)
at processing.opengl.PShader.getAttributeLoc(PShader.java:595)
at processing.opengl.PShader.loadAttributes(PShader.java:1123)
at processing.opengl.PGraphicsOpenGL.getPolyShader(PGraphicsOpenGL.java:7082)
at processing.opengl.PGraphicsOpenGL.flushPolys(PGraphicsOpenGL.java:2377)
at processing.opengl.PGraphicsOpenGL.flush(PGraphicsOpenGL.java:2314)
at processing.opengl.PGraphicsOpenGL.endDraw(PGraphicsOpenGL.java:1480)
at processing.core.PApplet.handleDraw(PApplet.java:2444)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Hi @gohai,
I DO have time to do more tests and I love to see Processing becoming better and better :) So, please let me know anytime if there's something I can test more.
Here's the output from testing core.jar with MD5 of 5601a9174287d2b83c6979bd23164a7d.
OpenGL error 1280 at bot beginDraw(): invalid enumerant
ARM
Mali-T628
OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e
OpenGL ES GLSL ES 3.10
GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image
java.lang.RuntimeException: GL function glBlitFramebuffer() is not available on this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
at processing.opengl.PJOGL.blitFramebuffer(PJOGL.java:1939)
at processing.opengl.PGL.syncBackTexture(PGL.java:595)
at processing.opengl.PGL.endRender(PGL.java:769)
at processing.opengl.PGraphicsOpenGL.endOnscreenDraw(PGraphicsOpenGL.java:6598)
at processing.opengl.PGraphicsOpenGL.endDraw(PGraphicsOpenGL.java:1483)
at processing.core.PApplet.handleDraw(PApplet.java:2444)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Many thanks,
Scott
Hi @gohai,
I just downloaded core.jar again and found that its MD5 checksum is identical (081feb5fff944b9a84640234cd79c70f).
I ran the test script (i.e., modes/java/examples/Demos/Tests/SpecsTest/SpecsTest.pde) and got the following output:
ARM
Mali-T628
OpenGL error 1280 at bot beginDraw(): invalid enumerant
OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e
OpenGL ES GLSL ES 3.10
GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image
numSamples is: 1
java.lang.RuntimeException: GL function glReadBuffer() is not available on this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
at processing.opengl.PJOGL.readBuffer(PJOGL.java:1954)
at processing.opengl.PJOGL.initFBOLayerES(PJOGL.java:310)
at processing.opengl.PJOGL.initFBOLayer(PJOGL.java:301)
at processing.opengl.PGL.createFBOLayer(PGL.java:988)
at processing.opengl.PGL.beginRender(PGL.java:727)
at processing.opengl.PGraphicsOpenGL.beginOnscreenDraw(PGraphicsOpenGL.java:6576)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1459)
at processing.core.PApplet.handleDraw(PApplet.java:2388)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Please verify this for me.
Thanks,
Scott
Hi @gohai,
As you instructed, I replaced /core/library/core.jar with the file you uploaded.
I ran the modes/java/examples/Demos/Tests/SpecsTest/SpecsTest.pde and I got the following output which looks quite similar to the old output.
OpenGL error 1280 at bot beginDraw(): invalid enumerant
ARM
Mali-T628
OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e
OpenGL ES GLSL ES 3.10
GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image
java.lang.RuntimeException: GL function glRenderbufferStorageMultisample() is not available on this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
at processing.opengl.PJOGL.renderbufferStorageMultisample(PJOGL.java:1941)
at processing.opengl.PGL.createFBOLayer(PGL.java:955)
at processing.opengl.PGL.beginRender(PGL.java:727)
at processing.opengl.PGraphicsOpenGL.beginOnscreenDraw(PGraphicsOpenGL.java:6576)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1459)
at processing.core.PApplet.handleDraw(PApplet.java:2388)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
However, I got something different for the following original code.
void setup() {
size(300, 300);
}
void draw() {
background(0);
}
The output is just:
OpenGL error 1280 at bot beginDraw(): invalid enumerant
without the error that I used to have :) Is this a right sign for me to go with P3D on ODROID-XU4?
Many thanks,
Scott
Hi @gohai,
Sorry for my belated response. Here is the output I got from Demos/Tests/SpecsTest.pde as it is.
Many thanks!
OpenGL error 1280 at bot beginDraw(): invalid enumerant
ARM
Mali-T628
OpenGL ES 3.1 v1.r17p0-01rel0.a881d28363cdb20f0017ed13c980967e
OpenGL ES GLSL ES 3.10
GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth24 GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync GL_OES_texture_npot GL_OES_vertex_half_float GL_OES_required_internalformat GL_OES_vertex_array_object GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888 GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV GL_OES_fbo_render_mipmap GL_OES_element_index_uint GL_EXT_shadow_samplers GL_OES_texture_compression_astc GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_KHR_texture_compression_astc_sliced_3d GL_KHR_debug GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query GL_EXT_blend_minmax GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_OES_texture_3D GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture GL_OES_surfaceless_context GL_OES_texture_stencil8 GL_EXT_shader_pixel_local_storage GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_ARM_mali_program_binary GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_OES_texture_storage_multisample_2d_array GL_OES_shader_image_atomic GL_EXT_robustness GL_EXT_texture_border_clamp GL_OES_texture_border_clamp GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array GL_OES_sample_variables GL_OES_sample_shading GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks GL_OES_shader_io_blocks GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image
java.lang.RuntimeException: GL function glRenderbufferStorageMultisample() is not available on this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
at processing.opengl.PJOGL.renderbufferStorageMultisample(PJOGL.java:1941)
at processing.opengl.PGL.createFBOLayer(PGL.java:955)
at processing.opengl.PGL.beginRender(PGL.java:727)
at processing.opengl.PGraphicsOpenGL.beginOnscreenDraw(PGraphicsOpenGL.java:6577)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1459)
at processing.core.PApplet.handleDraw(PApplet.java:2388)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
I'm trying to use Processing (3.3.7 ARMv6hf) on ODROID-XU4 on which Oracle JDK 8u162 32-bit ARM version is installed. The X11 configuration file (/etc/X11/xorg.conf) has been modified with the following lines appended to use OpenGL ES instead of OpenGL.
Section "Module"
Disable "glx"
EndSection
For a simple test, I made the following sketch which is running without any problems of course.
void setup() {
size(300, 300);
}
void draw() {
background(0);
}
However, if I make a change in size(300, 300) like the following,
size(300, 300, P3D);
I get the following error messages.
OpenGL error 1280 at bot beginDraw(): invalid enumerant
java.lang.RuntimeException: GL function glRenderbufferStorageMultisample() is not available on this hardware (or driver) Read http://wiki.processing.org/w/OpenGL_Issues for help.
at processing.opengl.PJOGL.renderbufferStorageMultisample(PJOGL.java:1941)
at processing.opengl.PGL.createFBOLayer(PGL.java:955)
at processing.opengl.PGL.beginRender(PGL.java:727)
at processing.opengl.PGraphicsOpenGL.beginOnscreenDraw(PGraphicsOpenGL.java:6577)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1459)
at processing.core.PApplet.handleDraw(PApplet.java:2388)
at processing.opengl.PSurfaceJOGL$DrawListener.display(PSurfaceJOGL.java:866)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:692)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:674)
at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:443)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1293)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1147)
at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:759)
at com.jogamp.opengl.util.AWTAnimatorImpl.display(AWTAnimatorImpl.java:81)
at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:452)
at com.jogamp.opengl.util.FPSAnimator$MainTask.run(FPSAnimator.java:178)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Would someone please help me resolve this problem?
Many thanks,
Scott
import com.jogamp.opengl.*;
import com.jogamp.opengl.GL4;
import com.jogamp.opengl.util.GLBuffers;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
IntBuffer Tex;
FloatBuffer mBuf;
PJOGL pgl;
GL4 gl4 ;
final int twidth = 1;
PShader shdr;
void settings() {
size(640, 360, P3D );
PJOGL.profile = 4;
}
void setup() {
/* //fragment.glsl
#version 430
layout(binding = 0) uniform sampler1D tex;
layout(location = 0) uniform vec3 iResolution;
layout(location = 0) out vec4 fragColor;
void main() {
vec2 uvv = (gl_FragCoord.xy*2.-iResolution.xy)/iResolution.z;
float arr = texelFetch( tex ,0,0) .r;
float cir=arr/length(uvv);
fragColor = vec4(vec3(cir),1.);
}
*/
/* //vertex.glsl
#version 430
in vec2 position;
void main(){
gl_Position = vec4(position.xy,0.,1.);
}
*/
shdr = loadShader("fragment.glsl", "vertex.glsl");
shader(shdr);
shdr.set("iResolution", new PVector(width, height, Math.min(width, height)));
Tex = GLBuffers.newDirectIntBuffer(1);
pgl = (PJOGL) beginPGL();
gl4 = pgl.gl.getGL4();
gl4.glGenTextures(1, Tex);
gl4.glBindTexture(GL4.GL_TEXTURE_1D, Tex.get(0));
mBuf = GLBuffers.newDirectFloatBuffer(twidth);
shdr.bind();
gl4.glTexImage1D( GL4.GL_TEXTURE_1D, 0, GL4.GL_R32F, twidth, 0, GL4.GL_RED, GL4.GL_FLOAT, mBuf );
shdr.unbind();
endPGL();
}
void draw() {
pgl = (PJOGL) beginPGL();
float arr = 1./random(2, 24);
gl4 = pgl.gl.getGL4();
shdr.bind();
if (frameCount%12==0) mBuf.put( arr ).rewind();
println(arr);
gl4.glTexSubImage1D( GL4.GL_TEXTURE_1D, 0, 0, twidth, GL4.GL_RED, GL4.GL_FLOAT, mBuf );
shdr.unbind();
endPGL();
rect(0, 0, width, height);
}
The error is long but this is what is at the top java.lang.noSuchMethodError:processing.core.PApplet.registerDispose(Ljava/lang/Object;)V
at com.jogamp.newt.opengl.GLWindow.display(GLWindow, java:759) at com.jogamp.opengl.until.AWTAnimatorImpl.display(AWTAnimatorImpl.java.81) at com.jogamp.opengl.until. Animatorbase.display(AnimatorBase.java:452) at com.jogamp.opengl.until FPSAnimator$Maintask.rung(FPSAnimator.java:178) at java.until.TimerThred.mainLoop (Timer.java:555) at java.until.TimerThred.run (Timer.java:505)
The Isadora forum has not commented yet but the link is here:https://community.troikatronix.com/topic/5106/processing-error-with-kinect-isadora
I want to use glScissor, which works fine.
But how can I end glScissor?
If i use gl.glDisable(GL.GL_SCISSOR_TEST);
then the scissor gets disabled for the whole draw frame.
import processing.opengl.*;
import com.jogamp.opengl.*;
GL gl;
void setup() {
size(500, 500, P2D);
}
void draw() {
background(255);
if (gl == null) {
gl = ((PJOGL)beginPGL()).gl.getGL();
}
gl.glEnable(GL.GL_SCISSOR_TEST);
gl.glScissor(mouseX-50, height-mouseY-50, 100, 100);
stroke(255, 0, 0);
for (int i = -width; i < width; i += 5) {
line(i*5, 0, width + i*5, height);
}
// how to draw what we currently have?
//gl.glDisable(GL.GL_SCISSOR_TEST);
fill(255,0,0);
rect(0, height/2, width, 10);
}