summaryrefslogtreecommitdiffstats
path: root/native_client_sdk/src/examples/tumbler/shader_util.cc
diff options
context:
space:
mode:
authorbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-19 02:46:32 +0000
committerbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-19 02:46:32 +0000
commit745945afe8e9fbfad7bb9ed442143172bf690073 (patch)
tree770e9c5f61e1204221fb4c2887cb863ad8b6688f /native_client_sdk/src/examples/tumbler/shader_util.cc
parentf0953ccbeb01a7a4ed1daa3cb84c2bc42adbed1f (diff)
downloadchromium_src-745945afe8e9fbfad7bb9ed442143172bf690073.zip
chromium_src-745945afe8e9fbfad7bb9ed442143172bf690073.tar.gz
chromium_src-745945afe8e9fbfad7bb9ed442143172bf690073.tar.bz2
Adding reduced version of sdk at 1387 to chrome tree.
BUG=None TEST=None R=noelallen@google.com TBR git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110822 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk/src/examples/tumbler/shader_util.cc')
-rw-r--r--native_client_sdk/src/examples/tumbler/shader_util.cc95
1 files changed, 95 insertions, 0 deletions
diff --git a/native_client_sdk/src/examples/tumbler/shader_util.cc b/native_client_sdk/src/examples/tumbler/shader_util.cc
new file mode 100644
index 0000000..2bbfc84
--- /dev/null
+++ b/native_client_sdk/src/examples/tumbler/shader_util.cc
@@ -0,0 +1,95 @@
+// Copyright (c) 2011 The Native Client Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "examples/tumbler/shader_util.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+namespace shader_util {
+
+GLuint CreateShaderOfType(GLenum type, const char *shader_src) {
+ GLuint shader;
+ GLint compiled;
+
+ // Create the shader object
+ shader = glCreateShader(type);
+
+ if (shader == 0)
+ return 0;
+
+ // Load and compile the shader source
+ glShaderSource(shader, 1, &shader_src, NULL);
+ glCompileShader(shader);
+
+ // Check the compile status
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
+ if (compiled == 0) {
+ GLint info_len = 0;
+ glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_len);
+ if (info_len > 1) {
+ char* info_log = reinterpret_cast<char*>(malloc(sizeof(char) * info_len));
+ glGetShaderInfoLog(shader, info_len, NULL, info_log);
+ // TODO(dspringer): We could really use a logging API.
+ printf("Error compiling shader:\n%s\n", info_log);
+ free(info_log);
+ }
+ glDeleteShader(shader);
+ return 0;
+ }
+
+ return shader;
+}
+
+GLuint CreateProgramFromVertexAndFragmentShaders(
+ const char *vertex_shader_src, const char *fragment_shader_src) {
+ GLuint vertex_shader;
+ GLuint fragment_shader;
+ GLuint program_object;
+ GLint linked;
+
+ // Load the vertex/fragment shaders
+ vertex_shader = CreateShaderOfType(GL_VERTEX_SHADER, vertex_shader_src);
+ if (vertex_shader == 0)
+ return 0;
+ fragment_shader = CreateShaderOfType(GL_FRAGMENT_SHADER, fragment_shader_src);
+ if (fragment_shader == 0) {
+ glDeleteShader(vertex_shader);
+ return 0;
+ }
+
+ // Create the program object and attach the shaders.
+ program_object = glCreateProgram();
+ if (program_object == 0)
+ return 0;
+ glAttachShader(program_object, vertex_shader);
+ glAttachShader(program_object, fragment_shader);
+
+ // Link the program
+ glLinkProgram(program_object);
+
+ // Check the link status
+ glGetProgramiv(program_object, GL_LINK_STATUS, &linked);
+ if (linked == 0) {
+ GLint info_len = 0;
+ glGetProgramiv(program_object, GL_INFO_LOG_LENGTH, &info_len);
+ if (info_len > 1) {
+ char* info_log = reinterpret_cast<char*>(malloc(info_len));
+ glGetProgramInfoLog(program_object, info_len, NULL, info_log);
+ // TODO(dspringer): We could really use a logging API.
+ printf("Error linking program:\n%s\n", info_log);
+ free(info_log);
+ }
+ glDeleteProgram(program_object);
+ return 0;
+ }
+
+ // Delete these here because they are attached to the program object.
+ glDeleteShader(vertex_shader);
+ glDeleteShader(fragment_shader);
+
+ return program_object;
+}
+
+} // namespace shader_util