mirror of
https://github.com/processing/processing4.git
synced 2026-02-02 21:29:17 +01:00
Adding the shader examples
This commit is contained in:
106
java/examples/Topics/Shaders/LowLevelGL/LowLevelGL.pde
Normal file
106
java/examples/Topics/Shaders/LowLevelGL/LowLevelGL.pde
Normal file
@@ -0,0 +1,106 @@
|
||||
// Draws a triangle using low-level OpenGL calls.
|
||||
import java.nio.*;
|
||||
|
||||
PGraphicsOpenGL pg;
|
||||
PGL pgl;
|
||||
|
||||
PShader flatShader;
|
||||
|
||||
int vertLoc;
|
||||
int colorLoc;
|
||||
|
||||
float[] vertices;
|
||||
float[] colors;
|
||||
|
||||
FloatBuffer vertData;
|
||||
FloatBuffer colorData;
|
||||
|
||||
void setup() {
|
||||
size(640, 360, P3D);
|
||||
|
||||
pg = (PGraphicsOpenGL)g;
|
||||
|
||||
// Loads a shader to render geometry w/out
|
||||
// textures and lights.
|
||||
flatShader = loadShader("frag.glsl", "vert.glsl");
|
||||
|
||||
vertices = new float[12];
|
||||
vertData = allocateDirectFloatBuffer(12);
|
||||
|
||||
colors = new float[12];
|
||||
colorData = allocateDirectFloatBuffer(12);
|
||||
}
|
||||
|
||||
void draw() {
|
||||
background(0);
|
||||
|
||||
// The geometric transformations will be automatically passed
|
||||
// to the shader.
|
||||
rotate(frameCount * 0.01f, width, height, 0);
|
||||
|
||||
updateGeometry();
|
||||
|
||||
pgl = pg.beginPGL();
|
||||
flatShader.bind();
|
||||
|
||||
vertLoc = pgl.getAttribLocation(flatShader.glProgram, "inVertex");
|
||||
colorLoc = pgl.getAttribLocation(flatShader.glProgram, "inColor");
|
||||
|
||||
pgl.enableVertexAttribArray(vertLoc);
|
||||
pgl.enableVertexAttribArray(colorLoc);
|
||||
|
||||
pgl.vertexAttribPointer(vertLoc, 4, PGL.FLOAT, false, 0, vertData);
|
||||
pgl.vertexAttribPointer(colorLoc, 4, PGL.FLOAT, false, 0, colorData);
|
||||
|
||||
pgl.drawArrays(PGL.TRIANGLES, 0, 3);
|
||||
|
||||
pgl.disableVertexAttribArray(vertLoc);
|
||||
pgl.disableVertexAttribArray(colorLoc);
|
||||
|
||||
flatShader.unbind();
|
||||
pg.endPGL();
|
||||
}
|
||||
|
||||
void updateGeometry() {
|
||||
// Vertex 1
|
||||
vertices[0] = 0;
|
||||
vertices[1] = 0;
|
||||
vertices[2] = 0;
|
||||
vertices[3] = 1;
|
||||
colors[0] = 1;
|
||||
colors[1] = 0;
|
||||
colors[2] = 0;
|
||||
colors[3] = 1;
|
||||
|
||||
// Corner 2
|
||||
vertices[4] = width/2;
|
||||
vertices[5] = height;
|
||||
vertices[6] = 0;
|
||||
vertices[7] = 1;
|
||||
colors[4] = 0;
|
||||
colors[5] = 1;
|
||||
colors[6] = 0;
|
||||
colors[7] = 1;
|
||||
|
||||
// Corner 3
|
||||
vertices[8] = width;
|
||||
vertices[9] = 0;
|
||||
vertices[10] = 0;
|
||||
vertices[11] = 1;
|
||||
colors[8] = 0;
|
||||
colors[9] = 0;
|
||||
colors[10] = 1;
|
||||
colors[11] = 1;
|
||||
|
||||
vertData.rewind();
|
||||
vertData.put(vertices);
|
||||
vertData.position(0);
|
||||
|
||||
colorData.rewind();
|
||||
colorData.put(colors);
|
||||
colorData.position(0);
|
||||
}
|
||||
|
||||
FloatBuffer allocateDirectFloatBuffer(int n) {
|
||||
return ByteBuffer.allocateDirect(n * Float.SIZE/8).order(ByteOrder.nativeOrder()).asFloatBuffer();
|
||||
}
|
||||
30
java/examples/Topics/Shaders/LowLevelGL/data/frag.glsl
Normal file
30
java/examples/Topics/Shaders/LowLevelGL/data/frag.glsl
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Part of the Processing project - http://processing.org
|
||||
|
||||
Copyright (c) 2011-12 Ben Fry and Casey Reas
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License version 2.1 as published by the Free Software Foundation.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General
|
||||
Public License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
varying vec4 vertColor;
|
||||
|
||||
void main() {
|
||||
gl_FragColor = vertColor;
|
||||
}
|
||||
32
java/examples/Topics/Shaders/LowLevelGL/data/vert.glsl
Normal file
32
java/examples/Topics/Shaders/LowLevelGL/data/vert.glsl
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
Part of the Processing project - http://processing.org
|
||||
|
||||
Copyright (c) 2011-12 Ben Fry and Casey Reas
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License version 2.1 as published by the Free Software Foundation.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General
|
||||
Public License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
uniform mat4 projmodelviewMatrix;
|
||||
|
||||
attribute vec4 inVertex;
|
||||
attribute vec4 inColor;
|
||||
|
||||
varying vec4 vertColor;
|
||||
|
||||
void main() {
|
||||
gl_Position = projmodelviewMatrix * inVertex;
|
||||
|
||||
vertColor = inColor;
|
||||
}
|
||||
Reference in New Issue
Block a user