History

Now that we have a Qt context, we can use their shader classes. However, we extend the program object class with glm-enabled functions.

Andrzej Kapolka committed 13 years ago

Commit 7211fd71 parent 652832c7 files · +57 −273Browse files

Showing the changes to interface/src/renderer/ProgramObject.cpp (1 of 7 files). Show all

Unified · Split

interface/src/renderer/ProgramObject.cpp+3−102
@@ -6,114 +6,15 @@ · 5 unmodified lines
66 // Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
77
88 #include "ProgramObject.h"
9−#include "ShaderObject.h"
109
11−ProgramObject::ProgramObject() : _handle(glCreateProgramObjectARB()) {
12−}
13−
14−ProgramObject::~ProgramObject() {
15− glDeleteObjectARB(_handle);
16−}
17−
18−void ProgramObject::attach(ShaderObject* shader) {
19− glAttachObjectARB(_handle, shader->getHandle());
20−}
21−
22−bool ProgramObject::attachFromSourceCode(int type, const char* source) {
23− ShaderObject* shader = new ShaderObject(type);
24− if (shader->compileSourceCode(source)) {
25− attach(shader);
26− return true;
27−
28− } else {
29− delete shader;
30− return false;
31− }
32−}
33−
34−bool ProgramObject::attachFromSourceFile(int type, const char* filename) {
35− ShaderObject* shader = new ShaderObject(type);
36− if (shader->compileSourceFile(filename)) {
37− attach(shader);
38− return true;
39−
40− } else {
41− delete shader;
42− return false;
43− }
44−}
45−
46−bool ProgramObject::link() {
47− glLinkProgramARB(_handle);
48− int status;
49− glGetObjectParameterivARB(_handle, GL_OBJECT_LINK_STATUS_ARB, &status);
50− return status;
51−}
52−
53−QByteArray ProgramObject::getLog() const {
54− int length;
55− glGetObjectParameterivARB(_handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
56− QByteArray log(length, 0);
57− glGetInfoLogARB(_handle, length, 0, log.data());
58− return log;
59−}
60−
61−void ProgramObject::bind() const {
62− glUseProgramObjectARB(_handle);
63−}
64−
65−void ProgramObject::release() const {
66− glUseProgramObjectARB(0);
67−}
68−
69−int ProgramObject::getUniformLocation(const char* name) const {
70− return glGetUniformLocationARB(_handle, name);
71−}
72−
73−void ProgramObject::setUniform(int location, int value) {
74− glUniform1iARB(location, value);
75−}
76−
77−void ProgramObject::setUniform(const char* name, int value) {
78− setUniform(getUniformLocation(name), value);
79−}
80−
81−void ProgramObject::setUniform(int location, float value) {
82− glUniform1fARB(location, value);
83−}
84−
85−void ProgramObject::setUniform(const char* name, float value) {
86− setUniform(getUniformLocation(name), value);
87−}
88−
89−void ProgramObject::setUniform(int location, float x, float y) {
90− glUniform2fARB(location, x, y);
91−}
92−
93−void ProgramObject::setUniform(const char* name, float x, float y) {
94− setUniform(getUniformLocation(name), x, y);
10+ProgramObject::ProgramObject(QObject* parent) : QGLShaderProgram(parent) {
9511 }
9612
9713 void ProgramObject::setUniform(int location, const glm::vec3& value) {
98− glUniform3fARB(location, value.x, value.y, value.z);
14+ setUniformValue(location, value.x, value.y, value.z);
9915 }
10016
10117 void ProgramObject::setUniform(const char* name, const glm::vec3& value) {
102− setUniform(getUniformLocation(name), value);
18+ setUniformValue(name, value.x, value.y, value.z);
10319 }
10420
105−void ProgramObject::setUniform(int location, float x, float y, float z) {
106− glUniform3fARB(location, x, y, z);
107−}
108−
109−void ProgramObject::setUniform(const char* name, float x, float y, float z) {
110− setUniform(getUniformLocation(name), x, y, z);
111−}
112−
113−void ProgramObject::setUniform(int location, float x, float y, float z, float w) {
114− glUniform4fARB(location, x, y, z, w);
115−}
116−
117−void ProgramObject::setUniform(const char* name, float x, float y, float z, float w) {
118− setUniform(getUniformLocation(name), x, y, z, w);
119−}