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
6// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.6// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
7 7
8#include "ProgramObject.h"8#include "ProgramObject.h"
9#include "ShaderObject.h"
10 9
11ProgramObject::ProgramObject() : _handle(glCreateProgramObjectARB()) {10ProgramObject::ProgramObject(QObject* parent) : QGLShaderProgram(parent) {
12}
13
14ProgramObject::~ProgramObject() {
15 glDeleteObjectARB(_handle);
16}
17
18void ProgramObject::attach(ShaderObject* shader) {
19 glAttachObjectARB(_handle, shader->getHandle());
20}
21
22bool 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
34bool 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
46bool ProgramObject::link() {
47 glLinkProgramARB(_handle);
48 int status;
49 glGetObjectParameterivARB(_handle, GL_OBJECT_LINK_STATUS_ARB, &status);
50 return status;
51}
52
53QByteArray 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
61void ProgramObject::bind() const {
62 glUseProgramObjectARB(_handle);
63}
64
65void ProgramObject::release() const {
66 glUseProgramObjectARB(0);
67}
68
69int ProgramObject::getUniformLocation(const char* name) const {
70 return glGetUniformLocationARB(_handle, name);
71}
72
73void ProgramObject::setUniform(int location, int value) {
74 glUniform1iARB(location, value);
75}
76
77void ProgramObject::setUniform(const char* name, int value) {
78 setUniform(getUniformLocation(name), value);
79}
80
81void ProgramObject::setUniform(int location, float value) {
82 glUniform1fARB(location, value);
83}
84
85void ProgramObject::setUniform(const char* name, float value) {
86 setUniform(getUniformLocation(name), value);
87}
88
89void ProgramObject::setUniform(int location, float x, float y) {
90 glUniform2fARB(location, x, y);
91}
92
93void ProgramObject::setUniform(const char* name, float x, float y) {
94 setUniform(getUniformLocation(name), x, y);
95}11}
96 12
97void ProgramObject::setUniform(int location, const glm::vec3& value) {13void 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);
99}15}
100 16
101void ProgramObject::setUniform(const char* name, const glm::vec3& value) {17void ProgramObject::setUniform(const char* name, const glm::vec3& value) {
102 setUniform(getUniformLocation(name), value);18 setUniformValue(name, value.x, value.y, value.z);
103}19}
104 20
105void ProgramObject::setUniform(int location, float x, float y, float z) {
106 glUniform3fARB(location, x, y, z);
107}
108
109void ProgramObject::setUniform(const char* name, float x, float y, float z) {
110 setUniform(getUniformLocation(name), x, y, z);
111}
112
113void ProgramObject::setUniform(int location, float x, float y, float z, float w) {
114 glUniform4fARB(location, x, y, z, w);
115}
116
117void ProgramObject::setUniform(const char* name, float x, float y, float z, float w) {
118 setUniform(getUniformLocation(name), x, y, z, w);
119}