Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// shader source laden String vertexSrc = new String(Files.readAllBytes(Paths.get(vertex)), Charset.defaultCharset()); String fragmentSrc = new String(Files.readAllBytes(Paths.get(fragment)), Charset.defaultCharset()); // shader erstellen vertexShader = glCreateShader(GL_VERTEX_SHADER); fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(vertexShader, vertexSrc); glShaderSource(fragmentShader, fragmentSrc); glCompileShader(vertexShader); glCompileShader(fragmentShader); // shader Status prüfen IntBuffer vertexCompileResult = BufferUtils.createIntBuffer(1); IntBuffer fragCompileResult = BufferUtils.createIntBuffer(1); glGetShaderiv(vertexShader, GL_COMPILE_STATUS, vertexCompileResult); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, fragCompileResult); if(vertexCompileResult.get(0) != 0){ System.err.println("Shader vertex compile error: "+String.valueOf(vertexCompileResult.get(0))); System.err.println("Log: "+glGetShaderInfoLog(vertexShader)); } if(fragCompileResult.get(0) != 0){ System.err.println("Shader fragment compile error: "+String.valueOf(fragCompileResult.get(0))); System.err.println("Log: "+glGetShaderInfoLog(fragmentShader)); } // an Shader Programm binden und linken shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); // Status prüfen IntBuffer linkResult = BufferUtils.createIntBuffer(1); glGetProgramiv(shaderProgram, GL_LINK_STATUS, linkResult); if(linkResult.get(0) != 0){ System.err.println("Shader link error: "+String.valueOf(linkResult.get(0))); } // Anbindung an VBOs glUseProgram(shaderProgram); // glBindAttribLocation(shaderProgram, 0, "vertex"); // glBindAttribLocation(shaderProgram, 1, "texCoord"); // GL Fehler prüfen int err = glGetError(); if(err != 0){ System.err.println("Shader GL error 2: "+String.valueOf(err)); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// vertex #version 150 uniform mat4 pv, m; in vec3 vertex; in vec2 texCoord; out vec2 tc; void main(){ tc = texCoord; gl_Position = pv*m*vec4(vertex, 1.0); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// fragment #version 150 precision highp float; uniform sampler2D tex; in vec2 tc; out vec4 color; void main(){ color = texture(tex, tc); } |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »DeKugelschieber« (29.11.2015, 19:07)
Community-Fossil
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (18.11.2015, 19:43)
HLSL-Quelltext |
|
1 |
uniform mat4 pv, m;
|
HLSL-Quelltext |
|
1 2 |
uniform mat4 pv; uniform mat4 m; |
Community-Fossil
Community-Fossil
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (18.11.2015, 21:30)
Community-Fossil
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
// im Sprite public void createRect(){ int i[] = {0, 1, 2, 1, 2, 3}; float v[] = {0, 0, 1, 0, 0, 1, 1, 1}; float t[] = {0, 0, 1, 0, 0, 1, 1, 1}; index = new VBO(GL_ELEMENT_ARRAY_BUFFER, GL_STATIC_DRAW); index.setData(i); vertex = new VBO(); // keine Parameter = GL_ARRAY_BUFFER, GL_STATIC_DRAW vertex.setData(v); texCoord = new VBO(); texCoord.setData(t); // GL Fehler prüfen int err = glGetError(); if(err != 0){ System.err.println("Sprite: "+String.valueOf(err)); } } // setData vom VBO (für int natürlich mit IntBuffer): public void setData(final float data[]){ FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length); buffer.put(data); bind(); glBufferData(target, buffer, usage); unbind(); size = data.length; } // render Methode: public void draw(){ Matrix3f m = new Matrix3f(); m.identity(); m.scale(new Vector2f(10)); shader2D.bind(); shader2D.enableAttribArrays(); shader2D.sendMat3("o", camera.getOrthoMatrix()); shader2D.sendMat3("m", m); int verLoc = shader2D.getAttribLocation("vertex"); // ist 0 sprite.getIndexBuffer().bind(); sprite.getVertexBuffer().bind(); sprite.getVertexBuffer().vertexAttribPointer(verLoc, 2, GL_FLOAT, false, 0, 0); glDrawElements(GL_TRIANGLES, sprite.getIndexBuffer().size(), GL_UNSIGNED_INT, 0); } // Vertex Shader: #version 130 uniform mat3 o, m; in vec2 vertex; void main(){ gl_Position = vec4(o*m*vec3(vertex, 1.0), 1.0); } // Fragment Shader: #version 130 precision highp float; out vec4 color; void main(){ color = vec4(1.0, 1.0, 1.0, 0.5); } |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (29.11.2015, 16:28)
Community-Fossil
Werbeanzeige