void createShaders() { vertexShader = "attribute vec4 position;\n" "attribute vec4 sourceColour;\n" "attribute vec2 texureCoordIn;\n" "\n" "uniform mat4 projectionMatrix;\n" "uniform mat4 viewMatrix;\n" "\n" "varying vec4 destinationColour;\n" "varying vec2 textureCoordOut;\n" "\n" "void main()\n" "{\n" " destinationColour = sourceColour;\n" " textureCoordOut = texureCoordIn;\n" " gl_Position = projectionMatrix * viewMatrix * position;\n" "}\n"; fragmentShader = #if JUCE_OPENGL_ES "varying lowp vec4 destinationColour;\n" "varying lowp vec2 textureCoordOut;\n" #else "varying vec4 destinationColour;\n" "varying vec2 textureCoordOut;\n" #endif "\n" "void main()\n" "{\n" " vec4 colour = vec4(0.95, 0.57, 0.03, 0.7);\n" " gl_FragColor = colour;\n" "}\n"; ScopedPointer<OpenGLShaderProgram> newShader (new OpenGLShaderProgram (openGLContext)); String statusText; if (newShader->addVertexShader (OpenGLHelpers::translateVertexShaderToV3 (vertexShader)) && newShader->addFragmentShader (OpenGLHelpers::translateFragmentShaderToV3 (fragmentShader)) && newShader->link()) { shape = nullptr; attributes = nullptr; uniforms = nullptr; shader = newShader; shader->use(); shape = new Shape (openGLContext); attributes = new Attributes (openGLContext, *shader); uniforms = new Uniforms (openGLContext, *shader); statusText = "GLSL: v" + String (OpenGLShaderProgram::getLanguageVersion(), 2); } else { statusText = newShader->getLastError(); } }
void createShaders() { vertexShader = "attribute vec4 position;\n" "attribute vec4 sourceColour;\n" "attribute vec2 textureCoordIn;\n" "\n" "uniform mat4 projectionMatrix;\n" "uniform mat4 viewMatrix;\n" "\n" "varying vec4 destinationColour;\n" "varying vec2 textureCoordOut;\n" "\n" "void main()\n" "{\n" " destinationColour = sourceColour;\n" " textureCoordOut = textureCoordIn;\n" " gl_Position = projectionMatrix * viewMatrix * position;\n" "}\n"; fragmentShader = #if JUCE_OPENGL_ES "varying lowp vec4 destinationColour;\n" "varying lowp vec2 textureCoordOut;\n" #else "varying vec4 destinationColour;\n" "varying vec2 textureCoordOut;\n" #endif #if DEFAULT_TEXTURE == 2 "\n" "uniform sampler2D demoTexture;\n" "\n" #endif "void main()\n" "{\n" #if JUCE_OPENGL_ES " precision lowp float;\n" #endif #if !DEFAULT_TEXTURE " gl_FragColor = destinationColour;\n" #elif DEFAULT_TEXTURE == 1 " gl_FragColor = vec4(0.95, 0.57, 0.03, 0.7);\n" #elif DEFAULT_TEXTURE == 2 " gl_FragColor = texture2D (demoTexture, textureCoordOut);\n" #endif "}\n"; // An OpenGLShaderProgram is a combination of shaders which are compiled and linked together ScopedPointer<OpenGLShaderProgram> newShaderProgram (new OpenGLShaderProgram (openGLContext)); String statusText; // Can be used to give a success or failure message after GLSL compilation // Create the program that combines Vertex and Fragment shaders if (newShaderProgram->addVertexShader (OpenGLHelpers::translateVertexShaderToV3 (vertexShader)) && newShaderProgram->addFragmentShader (OpenGLHelpers::translateFragmentShaderToV3 (fragmentShader)) && newShaderProgram->link()) { // Do the following to be in a known state in case problems occur shape = nullptr; attributes = nullptr; uniforms = nullptr; // Tell the GPU that this program is the one to be used for next frame usedShaderProgram = newShaderProgram; // ** Not needed **: will be called when render callback is run shader->use(); // Load the object that will be used to defined vertices and fragments shape = new Shape (openGLContext); // The object itself attributes = new Attributes (openGLContext, *usedShaderProgram); // The object attributes uniforms = new Uniforms (openGLContext, *usedShaderProgram); // The global data to be shared between // the CPU code and the GPU shaders statusText = "GLSL: v" + String (OpenGLShaderProgram::getLanguageVersion(), 2); // Not used in this demo } else { statusText = newShaderProgram->getLastError(); // Not used in this demo } }