76
58
float *f = (float*)mData;
77
bgl::blUniform1fARB(mLoc,(GLfloat)*f);
59
glUniform1fARB(mLoc,(GLfloat)*f);
80
62
int *f = (int*)mData;
81
bgl::blUniform1iARB(mLoc, (GLint)*f);
63
glUniform1iARB(mLoc, (GLint)*f);
84
66
float *f = (float*)mData;
85
bgl::blUniform2fvARB(mLoc,1, (GLfloat*)f);
67
glUniform2fvARB(mLoc,1, (GLfloat*)f);
88
70
float *f = (float*)mData;
89
bgl::blUniform3fvARB(mLoc,1,(GLfloat*)f);
71
glUniform3fvARB(mLoc,1,(GLfloat*)f);
92
74
float *f = (float*)mData;
93
bgl::blUniform4fvARB(mLoc,1,(GLfloat*)f);
75
glUniform4fvARB(mLoc,1,(GLfloat*)f);
96
78
int *f = (int*)mData;
97
bgl::blUniform2ivARB(mLoc,1,(GLint*)f);
79
glUniform2ivARB(mLoc,1,(GLint*)f);
100
82
int *f = (int*)mData;
101
bgl::blUniform3ivARB(mLoc,1,(GLint*)f);
83
glUniform3ivARB(mLoc,1,(GLint*)f);
104
86
int *f = (int*)mData;
105
bgl::blUniform4ivARB(mLoc,1,(GLint*)f);
87
glUniform4ivARB(mLoc,1,(GLint*)f);
108
90
float *f = (float*)mData;
109
bgl::blUniformMatrix4fvARB(mLoc, 1, mTranspose?GL_TRUE:GL_FALSE,(GLfloat*)f);
91
glUniformMatrix4fvARB(mLoc, 1, mTranspose?GL_TRUE:GL_FALSE,(GLfloat*)f);
112
94
float *f = (float*)mData;
113
bgl::blUniformMatrix3fvARB(mLoc, 1, mTranspose?GL_TRUE:GL_FALSE,(GLfloat*)f);
95
glUniformMatrix3fvARB(mLoc, 1, mTranspose?GL_TRUE:GL_FALSE,(GLfloat*)f);
121
102
void BL_Uniform::SetData(int location, int type,bool transpose)
585
552
int BL_Shader::GetAttribLocation(const STR_String& name)
587
#ifdef GL_ARB_shader_objects
588
if( RAS_EXT_support._ARB_fragment_shader &&
589
RAS_EXT_support._ARB_vertex_shader &&
590
RAS_EXT_support._ARB_shader_objects
554
if( GLEW_ARB_fragment_shader &&
555
GLEW_ARB_vertex_shader &&
556
GLEW_ARB_shader_objects
593
return bgl::blGetAttribLocationARB(mShader, name.ReadPtr());
559
return glGetAttribLocationARB(mShader, name.ReadPtr());
599
565
void BL_Shader::BindAttribute(const STR_String& attr, int loc)
601
#ifdef GL_ARB_shader_objects
602
if( RAS_EXT_support._ARB_fragment_shader &&
603
RAS_EXT_support._ARB_vertex_shader &&
604
RAS_EXT_support._ARB_shader_objects
567
if( GLEW_ARB_fragment_shader &&
568
GLEW_ARB_vertex_shader &&
569
GLEW_ARB_shader_objects
607
bgl::blBindAttribLocationARB(mShader, loc, attr.ReadPtr());
572
glBindAttribLocationARB(mShader, loc, attr.ReadPtr());
612
576
int BL_Shader::GetUniformLocation(const STR_String& name)
614
#ifdef GL_ARB_shader_objects
615
if( RAS_EXT_support._ARB_fragment_shader &&
616
RAS_EXT_support._ARB_vertex_shader &&
617
RAS_EXT_support._ARB_shader_objects
578
if( GLEW_ARB_fragment_shader &&
579
GLEW_ARB_vertex_shader &&
580
GLEW_ARB_shader_objects
620
583
MT_assert(mShader!=0);
621
int location = bgl::blGetUniformLocationARB(mShader, name.ReadPtr());
584
int location = glGetUniformLocationARB(mShader, name.ReadPtr());
622
585
if(location == -1)
623
586
spit("Invalid uniform value: " << name.ReadPtr() << ".");
630
593
void BL_Shader::SetUniform(int uniform, const MT_Tuple2& vec)
632
#ifdef GL_ARB_shader_objects
633
if( RAS_EXT_support._ARB_fragment_shader &&
634
RAS_EXT_support._ARB_vertex_shader &&
635
RAS_EXT_support._ARB_shader_objects
595
if( GLEW_ARB_fragment_shader &&
596
GLEW_ARB_vertex_shader &&
597
GLEW_ARB_shader_objects
639
601
vec.getValue(value);
640
bgl::blUniform2fvARB(uniform, 1, value);
602
glUniform2fvARB(uniform, 1, value);
646
607
void BL_Shader::SetUniform(int uniform, const MT_Tuple3& vec)
648
#ifdef GL_ARB_shader_objects
649
if( RAS_EXT_support._ARB_fragment_shader &&
650
RAS_EXT_support._ARB_vertex_shader &&
651
RAS_EXT_support._ARB_shader_objects
609
if( GLEW_ARB_fragment_shader &&
610
GLEW_ARB_vertex_shader &&
611
GLEW_ARB_shader_objects
655
615
vec.getValue(value);
656
bgl::blUniform3fvARB(uniform, 1, value);
616
glUniform3fvARB(uniform, 1, value);
661
620
void BL_Shader::SetUniform(int uniform, const MT_Tuple4& vec)
663
#ifdef GL_ARB_shader_objects
664
if( RAS_EXT_support._ARB_fragment_shader &&
665
RAS_EXT_support._ARB_vertex_shader &&
666
RAS_EXT_support._ARB_shader_objects
622
if( GLEW_ARB_fragment_shader &&
623
GLEW_ARB_vertex_shader &&
624
GLEW_ARB_shader_objects
670
628
vec.getValue(value);
671
bgl::blUniform4fvARB(uniform, 1, value);
629
glUniform4fvARB(uniform, 1, value);
676
633
void BL_Shader::SetUniform(int uniform, const unsigned int& val)
678
#ifdef GL_ARB_shader_objects
679
if( RAS_EXT_support._ARB_fragment_shader &&
680
RAS_EXT_support._ARB_vertex_shader &&
681
RAS_EXT_support._ARB_shader_objects
635
if( GLEW_ARB_fragment_shader &&
636
GLEW_ARB_vertex_shader &&
637
GLEW_ARB_shader_objects
684
bgl::blUniform1iARB(uniform, val);
640
glUniform1iARB(uniform, val);
689
644
void BL_Shader::SetUniform(int uniform, const int val)
691
#ifdef GL_ARB_shader_objects
692
if( RAS_EXT_support._ARB_fragment_shader &&
693
RAS_EXT_support._ARB_vertex_shader &&
694
RAS_EXT_support._ARB_shader_objects
646
if( GLEW_ARB_fragment_shader &&
647
GLEW_ARB_vertex_shader &&
648
GLEW_ARB_shader_objects
697
bgl::blUniform1iARB(uniform, val);
651
glUniform1iARB(uniform, val);
702
655
void BL_Shader::SetUniform(int uniform, const float& val)
704
#ifdef GL_ARB_shader_objects
705
if( RAS_EXT_support._ARB_fragment_shader &&
706
RAS_EXT_support._ARB_vertex_shader &&
707
RAS_EXT_support._ARB_shader_objects
657
if( GLEW_ARB_fragment_shader &&
658
GLEW_ARB_vertex_shader &&
659
GLEW_ARB_shader_objects
710
bgl::blUniform1fARB(uniform, val);
662
glUniform1fARB(uniform, val);
715
666
void BL_Shader::SetUniform(int uniform, const MT_Matrix4x4& vec, bool transpose)
717
#ifdef GL_ARB_shader_objects
718
if( RAS_EXT_support._ARB_fragment_shader &&
719
RAS_EXT_support._ARB_vertex_shader &&
720
RAS_EXT_support._ARB_shader_objects
668
if( GLEW_ARB_fragment_shader &&
669
GLEW_ARB_vertex_shader &&
670
GLEW_ARB_shader_objects
674
// note: getValue gives back column major as needed by OpenGL
724
675
vec.getValue(value);
725
bgl::blUniformMatrix4fvARB(uniform, 1, transpose?GL_TRUE:GL_FALSE, value);
676
glUniformMatrix4fvARB(uniform, 1, transpose?GL_TRUE:GL_FALSE, value);
730
680
void BL_Shader::SetUniform(int uniform, const MT_Matrix3x3& vec, bool transpose)
732
#ifdef GL_ARB_shader_objects
733
if( RAS_EXT_support._ARB_fragment_shader &&
734
RAS_EXT_support._ARB_vertex_shader &&
735
RAS_EXT_support._ARB_shader_objects
682
if( GLEW_ARB_fragment_shader &&
683
GLEW_ARB_vertex_shader &&
684
GLEW_ARB_shader_objects
739
688
value[0] = (float)vec[0][0]; value[1] = (float)vec[1][0]; value[2] = (float)vec[2][0];
740
689
value[3] = (float)vec[0][1]; value[4] = (float)vec[1][1]; value[5] = (float)vec[2][1];
741
690
value[6] = (float)vec[0][2]; value[7] = (float)vec[1][2]; value[7] = (float)vec[2][2];
742
bgl::blUniformMatrix3fvARB(uniform, 1, transpose?GL_TRUE:GL_FALSE, value);
691
glUniformMatrix3fvARB(uniform, 1, transpose?GL_TRUE:GL_FALSE, value);
747
695
void BL_Shader::SetUniform(int uniform, const float* val, int len)
749
#ifdef GL_ARB_shader_objects
750
if( RAS_EXT_support._ARB_fragment_shader &&
751
RAS_EXT_support._ARB_vertex_shader &&
752
RAS_EXT_support._ARB_shader_objects
697
if( GLEW_ARB_fragment_shader &&
698
GLEW_ARB_vertex_shader &&
699
GLEW_ARB_shader_objects
756
bgl::blUniform2fvARB(uniform, 1,(GLfloat*)val);
703
glUniform2fvARB(uniform, 1,(GLfloat*)val);
757
704
else if (len == 3)
758
bgl::blUniform3fvARB(uniform, 1,(GLfloat*)val);
705
glUniform3fvARB(uniform, 1,(GLfloat*)val);
759
706
else if (len == 4)
760
bgl::blUniform4fvARB(uniform, 1,(GLfloat*)val);
707
glUniform4fvARB(uniform, 1,(GLfloat*)val);
767
713
void BL_Shader::SetUniform(int uniform, const int* val, int len)
769
#ifdef GL_ARB_shader_objects
770
if( RAS_EXT_support._ARB_fragment_shader &&
771
RAS_EXT_support._ARB_vertex_shader &&
772
RAS_EXT_support._ARB_shader_objects
715
if( GLEW_ARB_fragment_shader &&
716
GLEW_ARB_vertex_shader &&
717
GLEW_ARB_shader_objects
776
bgl::blUniform2ivARB(uniform, 1, (GLint*)val);
721
glUniform2ivARB(uniform, 1, (GLint*)val);
777
722
else if (len == 3)
778
bgl::blUniform3ivARB(uniform, 1, (GLint*)val);
723
glUniform3ivARB(uniform, 1, (GLint*)val);
779
724
else if (len == 4)
780
bgl::blUniform4ivARB(uniform, 1, (GLint*)val);
725
glUniform4ivARB(uniform, 1, (GLint*)val);