From patchwork Thu Jul 21 12:36:30 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandros Frantzis X-Patchwork-Id: 2947 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 8FCA523F4D for ; Thu, 21 Jul 2011 12:42:35 +0000 (UTC) Received: from mail-qy0-f173.google.com (mail-qy0-f173.google.com [209.85.216.173]) by fiordland.canonical.com (Postfix) with ESMTP id 5F3E2A18287 for ; Thu, 21 Jul 2011 12:42:35 +0000 (UTC) Received: by mail-qy0-f173.google.com with SMTP id 10so3962301qyk.11 for ; Thu, 21 Jul 2011 05:42:35 -0700 (PDT) Received: by 10.229.68.200 with SMTP id w8mr190643qci.114.1311252155153; Thu, 21 Jul 2011 05:42:35 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.229.217.78 with SMTP id hl14cs139503qcb; Thu, 21 Jul 2011 05:42:34 -0700 (PDT) Received: by 10.216.243.203 with SMTP id k53mr168874wer.87.1311251794736; Thu, 21 Jul 2011 05:36:34 -0700 (PDT) Received: from adelie.canonical.com (adelie.canonical.com [91.189.90.139]) by mx.google.com with ESMTP id 55si2397626wel.35.2011.07.21.05.36.34; Thu, 21 Jul 2011 05:36:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) client-ip=91.189.90.139; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) smtp.mail=bounces@canonical.com Received: from loganberry.canonical.com ([91.189.90.37]) by adelie.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1QjsUS-0000Ct-G7 for ; Thu, 21 Jul 2011 12:36:32 +0000 Received: from loganberry.canonical.com (localhost [127.0.0.1]) by loganberry.canonical.com (Postfix) with ESMTP id 5F8422E8954 for ; Thu, 21 Jul 2011 12:36:30 +0000 (UTC) MIME-Version: 1.0 X-Launchpad-Project: glmark2 X-Launchpad-Branch: ~glmark2-dev/glmark2/trunk X-Launchpad-Message-Rationale: Subscriber X-Launchpad-Branch-Revision-Number: 8 X-Launchpad-Notification-Type: branch-revision To: Linaro Patch Tracker From: noreply@launchpad.net Subject: [Branch ~glmark2-dev/glmark2/trunk] Rev 8: Add support for some standard shader uniforms. Message-Id: <20110721123630.17019.37793.launchpad@loganberry.canonical.com> Date: Thu, 21 Jul 2011 12:36:30 -0000 Reply-To: noreply@launchpad.net Sender: bounces@canonical.com Errors-To: bounces@canonical.com Precedence: bulk X-Generated-By: Launchpad (canonical.com); Revision="13475"; Instance="initZopeless config overlay" X-Launchpad-Hash: e590971e9eca0bf96d5f637e00a225dbaaa1918e ------------------------------------------------------------ revno: 8 committer: Alexandros Frantzis timestamp: Thu 2010-07-08 11:16:07 +0300 message: Add support for some standard shader uniforms. Add shader compilation and linking debug information. modified: shader.cpp shader.h --- lp:glmark2 https://code.launchpad.net/~glmark2-dev/glmark2/trunk You are subscribed to branch lp:glmark2. To unsubscribe from this branch go to https://code.launchpad.net/~glmark2-dev/glmark2/trunk/+edit-subscription === modified file 'shader.cpp' --- shader.cpp 2010-07-07 10:32:18 +0000 +++ shader.cpp 2010-07-08 08:16:07 +0000 @@ -10,11 +10,11 @@ fp = fopen(FileName,"rt"); fseek(fp, 0, SEEK_END); - + flength = ftell(fp); - + rewind(fp); - + DATA = (char *)malloc(sizeof(char) * (flength+1)); flength = fread(DATA, sizeof(char), flength, fp); @@ -33,31 +33,65 @@ void Shader::load(const char *pVertexShaderFileName, const char *pFragmentShaderFileName) { char *vertex_shader_source, *fragment_shader_source; - - mVertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER); - mFragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER); - - vertex_shader_source = readShaderFile(pVertexShaderFileName); - - fragment_shader_source = readShaderFile(pFragmentShaderFileName); - - const char *vs = vertex_shader_source; - const char *fs = fragment_shader_source; - - glShaderSourceARB(mVertexShader, 1, &vs, NULL); - glShaderSourceARB(mFragmentShader, 1, &fs, NULL); - - free(vertex_shader_source); - free(fragment_shader_source); - - glCompileShaderARB(mVertexShader); - glCompileShaderARB(mFragmentShader); - - mShaderProgram = glCreateProgramObjectARB(); - glAttachObjectARB(mShaderProgram, mFragmentShader); - glAttachObjectARB(mShaderProgram, mVertexShader); - - glLinkProgram(mShaderProgram); + char msg[512]; + + mVertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER); + mFragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER); + + vertex_shader_source = readShaderFile(pVertexShaderFileName); + + fragment_shader_source = readShaderFile(pFragmentShaderFileName); + + const char *vs = vertex_shader_source; + const char *fs = fragment_shader_source; + + glShaderSourceARB(mVertexShader, 1, &vs, NULL); + glShaderSourceARB(mFragmentShader, 1, &fs, NULL); + + free(vertex_shader_source); + free(fragment_shader_source); + + glCompileShaderARB(mVertexShader); + glGetShaderInfoLog(mVertexShader, sizeof msg, NULL, msg); + if (strlen(msg) > 0) + printf("%s: %s", pVertexShaderFileName, msg); + + glCompileShaderARB(mFragmentShader); + glGetShaderInfoLog(mFragmentShader, sizeof msg, NULL, msg); + if (strlen(msg) > 0) + printf("%s: %s\n", pFragmentShaderFileName, msg); + + mShaderProgram = glCreateProgramObjectARB(); + glAttachObjectARB(mShaderProgram, mFragmentShader); + glAttachObjectARB(mShaderProgram, mVertexShader); + glBindAttribLocation(mShaderProgram, 0, "position"); + glBindAttribLocation(mShaderProgram, 1, "normal"); + glBindAttribLocation(mShaderProgram, 2, "texture"); + + glLinkProgram(mShaderProgram); + glGetShaderInfoLog(mShaderProgram, sizeof msg, NULL, msg); + if (strlen(msg) > 0) + printf("Shader Linking: %s\n", msg); + + mLocations.ModelViewProjectionMatrix = glGetUniformLocation(mShaderProgram, + "ModelViewProjectionMatrix"); + mLocations.NormalMatrix = glGetUniformLocation(mShaderProgram, + "NormalMatrix"); + mLocations.LightSourcePosition = glGetUniformLocation(mShaderProgram, + "LightSourcePosition"); + mLocations.LightSourceDiffuse = glGetUniformLocation(mShaderProgram, + "LightSourceDiffuse"); + mLocations.MaterialDiffuse = glGetUniformLocation(mShaderProgram, + "MaterialDiffuse"); +#ifdef _DEBUG + printf("Uniform Locations: %d %d %d %d %d\n", + mLocations.ModelViewProjectionMatrix, + mLocations.NormalMatrix, + mLocations.LightSourcePosition, + mLocations.LightSourceDiffuse, + mLocations.MaterialDiffuse); +#endif + } void Shader::use() === modified file 'shader.h' --- shader.h 2010-07-07 10:32:18 +0000 +++ shader.h 2010-07-08 08:16:07 +0000 @@ -17,6 +17,13 @@ GLuint mVertexShader; GLuint mFragmentShader; int mShaderProgram; + struct { + GLint ModelViewProjectionMatrix; + GLint NormalMatrix; + GLint LightSourcePosition; + GLint LightSourceDiffuse; + GLint MaterialDiffuse; + } mLocations; }; #endif