summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp')
-rw-r--r--chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp b/chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp
new file mode 100644
index 00000000000..33b00062afc
--- /dev/null
+++ b/chromium/third_party/angle/samples/angle/simple_texture_2d/SimpleTexture2D.cpp
@@ -0,0 +1,141 @@
+//
+// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// Based on Simple_Texture2D.c from
+// Book: OpenGL(R) ES 2.0 Programming Guide
+// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
+// ISBN-10: 0321502795
+// ISBN-13: 9780321502797
+// Publisher: Addison-Wesley Professional
+// URLs: http://safari.informit.com/9780321563835
+// http://www.opengles-book.com
+
+#include "SampleApplication.h"
+#include "shader_utils.h"
+#include "texture_utils.h"
+
+class SimpleTexture2DSample : public SampleApplication
+{
+ public:
+ SimpleTexture2DSample::SimpleTexture2DSample()
+ : SampleApplication("SimpleTexture2D", 1280, 720)
+ {
+ }
+
+ virtual bool initialize()
+ {
+ const std::string vs = SHADER_SOURCE
+ (
+ attribute vec4 a_position;
+ attribute vec2 a_texCoord;
+ varying vec2 v_texCoord;
+ void main()
+ {
+ gl_Position = a_position;
+ v_texCoord = a_texCoord;
+ }
+ );
+
+ const std::string fs = SHADER_SOURCE
+ (
+ precision mediump float;
+ varying vec2 v_texCoord;
+ uniform sampler2D s_texture;
+ void main()
+ {
+ gl_FragColor = texture2D(s_texture, v_texCoord);
+ }
+ );
+
+ mProgram = CompileProgram(vs, fs);
+ if (!mProgram)
+ {
+ return false;
+ }
+
+ // Get the attribute locations
+ mPositionLoc = glGetAttribLocation(mProgram, "a_position");
+ mTexCoordLoc = glGetAttribLocation(mProgram, "a_texCoord");
+
+ // Get the sampler location
+ mSamplerLoc = glGetUniformLocation(mProgram, "s_texture");
+
+ // Load the texture
+ mTexture = CreateSimpleTexture2D();
+
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+
+ return true;
+ }
+
+ virtual void destroy()
+ {
+ glDeleteProgram(mProgram);
+ glDeleteTextures(1, &mTexture);
+ }
+
+ virtual void draw()
+ {
+ GLfloat vertices[] =
+ {
+ -0.5f, 0.5f, 0.0f, // Position 0
+ 0.0f, 0.0f, // TexCoord 0
+ -0.5f, -0.5f, 0.0f, // Position 1
+ 0.0f, 1.0f, // TexCoord 1
+ 0.5f, -0.5f, 0.0f, // Position 2
+ 1.0f, 1.0f, // TexCoord 2
+ 0.5f, 0.5f, 0.0f, // Position 3
+ 1.0f, 0.0f // TexCoord 3
+ };
+ GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
+
+ // Set the viewport
+ glViewport(0, 0, getWindow()->getWidth(), getWindow()->getHeight());
+
+ // Clear the color buffer
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ // Use the program object
+ glUseProgram(mProgram);
+
+ // Load the vertex position
+ glVertexAttribPointer(mPositionLoc, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), vertices);
+ // Load the texture coordinate
+ glVertexAttribPointer(mTexCoordLoc, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), vertices + 3);
+
+ glEnableVertexAttribArray(mPositionLoc);
+ glEnableVertexAttribArray(mTexCoordLoc);
+
+ // Bind the texture
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, mTexture);
+
+ // Set the texture sampler to texture unit to 0
+ glUniform1i(mSamplerLoc, 0);
+
+ glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
+ }
+
+ private:
+ // Handle to a program object
+ GLuint mProgram;
+
+ // Attribute locations
+ GLint mPositionLoc;
+ GLint mTexCoordLoc;
+
+ // Sampler location
+ GLint mSamplerLoc;
+
+ // Texture handle
+ GLuint mTexture;
+};
+
+int main(int argc, char **argv)
+{
+ SimpleTexture2DSample app;
+ return app.run();
+}