-
Notifications
You must be signed in to change notification settings - Fork 91
/
Copy pathShaderHelper.cpp
70 lines (55 loc) · 2.58 KB
/
ShaderHelper.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/***********************************************************************
ShaderHelper - Helper functions to create GLSL shaders from text files.
Copyright (c) 2014 Oliver Kreylos
This file is part of the Augmented Reality Sandbox (SARndbox).
The Augmented Reality Sandbox is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Augmented Reality Sandbox is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with the Augmented Reality Sandbox; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***********************************************************************/
#include "ShaderHelper.h"
#include <string>
#include <GL/gl.h>
#include <GL/Extensions/GLARBFragmentShader.h>
#include <GL/Extensions/GLARBShaderObjects.h>
#include <GL/Extensions/GLARBVertexShader.h>
#include "Config.h"
GLhandleARB compileVertexShader(const char* vertexShaderFileName)
{
/* Construct the full shader source file name: */
std::string fullShaderFileName=CONFIG_SHADERDIR;
fullShaderFileName.push_back('/');
fullShaderFileName.append(vertexShaderFileName);
fullShaderFileName.append(".vs");
/* Compile and return the vertex shader: */
return glCompileVertexShaderFromFile(fullShaderFileName.c_str());
}
GLhandleARB compileFragmentShader(const char* fragmentShaderFileName)
{
/* Construct the full shader source file name: */
std::string fullShaderFileName=CONFIG_SHADERDIR;
fullShaderFileName.push_back('/');
fullShaderFileName.append(fragmentShaderFileName);
fullShaderFileName.append(".fs");
/* Compile and return the fragment shader: */
return glCompileFragmentShaderFromFile(fullShaderFileName.c_str());
}
GLhandleARB linkVertexAndFragmentShader(const char* shaderFileName)
{
/* Compile the vertex and fragment shaders: */
GLhandleARB vertexShader=compileVertexShader(shaderFileName);
GLhandleARB fragmentShader=compileFragmentShader(shaderFileName);
/* Link the shader program: */
GLhandleARB shaderProgram=glLinkShader(vertexShader,fragmentShader);
/* Release the compiled shaders (won't get deleted until shader program is released): */
glDeleteObjectARB(vertexShader);
glDeleteObjectARB(fragmentShader);
return shaderProgram;
}