~glmark2-dev/glmark2/libmatrix-util

« back to all changes in this revision

Viewing changes to shader.cpp

  • Committer: Alexandros Frantzis
  • Date: 2010-07-07 10:32:18 UTC
  • Revision ID: git-v1:d2683504fc3cc84e7f3aefd917147037706cecf0
Initial release of original OpenGL code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "shader.h"
 
2
 
 
3
char *readShaderFile(const char *FileName)
 
4
{
 
5
    FILE *fp;
 
6
    char *DATA = NULL;
 
7
 
 
8
    int flength = 0;
 
9
 
 
10
    fp = fopen(FileName,"rt");
 
11
 
 
12
    fseek(fp, 0, SEEK_END);
 
13
    
 
14
    flength = ftell(fp);
 
15
    
 
16
    rewind(fp);
 
17
    
 
18
 
 
19
    DATA = (char *)malloc(sizeof(char) * (flength+1));
 
20
    flength = fread(DATA, sizeof(char), flength, fp);
 
21
    DATA[flength] = '\0';
 
22
 
 
23
    fclose(fp);
 
24
 
 
25
    return DATA;
 
26
}
 
27
 
 
28
Shader::~Shader()
 
29
{
 
30
    remove();
 
31
}
 
32
 
 
33
void Shader::load(const char *pVertexShaderFileName, const char *pFragmentShaderFileName)
 
34
{
 
35
    char *vertex_shader_source, *fragment_shader_source;
 
36
    
 
37
        mVertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER);
 
38
        mFragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
 
39
 
 
40
        vertex_shader_source = readShaderFile(pVertexShaderFileName);
 
41
 
 
42
        fragment_shader_source = readShaderFile(pFragmentShaderFileName);
 
43
 
 
44
        const char *vs = vertex_shader_source;
 
45
        const char *fs = fragment_shader_source;
 
46
 
 
47
        glShaderSourceARB(mVertexShader, 1, &vs, NULL);
 
48
        glShaderSourceARB(mFragmentShader, 1, &fs, NULL);
 
49
 
 
50
        free(vertex_shader_source);
 
51
        free(fragment_shader_source);
 
52
 
 
53
        glCompileShaderARB(mVertexShader);
 
54
        glCompileShaderARB(mFragmentShader);
 
55
 
 
56
        mShaderProgram = glCreateProgramObjectARB();
 
57
        glAttachObjectARB(mShaderProgram, mFragmentShader);
 
58
        glAttachObjectARB(mShaderProgram, mVertexShader);
 
59
 
 
60
        glLinkProgram(mShaderProgram);
 
61
}
 
62
 
 
63
void Shader::use()
 
64
{
 
65
    glUseProgramObjectARB(mShaderProgram);
 
66
}
 
67
 
 
68
void Shader::remove()
 
69
{
 
70
    glDetachObjectARB(mShaderProgram, mVertexShader);
 
71
    glDetachObjectARB(mShaderProgram, mFragmentShader);
 
72
 
 
73
    glDeleteObjectARB(mShaderProgram);
 
74
}