示例#1
0
void Ex08_09::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  object_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh08_09.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh08_09.frag" },
		{ GL_NONE, NULL }
	};

	object_prog = LoadShaders( object_shaders );

	glLinkProgram(object_prog);

	object_mat_mv_loc = glGetUniformLocation(object_prog, "MVMatrix");
	object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");

	GLuint object_light_pos_loc = glGetUniformLocation(object_prog, "LightPosition");
	GLuint object_mat_normal_loc = glGetUniformLocation(object_prog, "NormalMatrix");

	glUseProgram(object_prog);	

	GLfloat normal_matrix[3 * 3] = {
		1.0f, 0.0f, 0.0f,
		0.0f, 1.0f, 0.0f,
		0.0f, 0.0f, 1.0f
	};

	glUniformMatrix3fv(object_mat_normal_loc, 1, GL_TRUE, normal_matrix);
	glUniform3fv(object_light_pos_loc, 1, vmath::vec3(0.5f, 0.5f, -1.0f));

	object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}
示例#2
0
CGLTexture::CGLTexture(CLog *pInLog,string f) {
    Initialize();
    if(pInLog){
        bMadeLog=false;
        pLog=pInLog;
    }
    LoadGL(f);
}
示例#3
0
void Ex06_16::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  base_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh06_16.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh06_16.frag" },
		{ GL_NONE, NULL }
	};

	base_prog = LoadShaders( base_shaders );

	glGenBuffers(1, &quad_vbo);
	glBindBuffer(GL_ARRAY_BUFFER, quad_vbo);

	static const GLfloat quad_data[] =
	{
		1.0f, -1.0f,
		-1.0f, -1.0f,
		-1.0f, 1.0f,
		1.0f, 1.0f,

		0.0f, 0.0f,
		1.0f, 0.0f,
		1.0f, 1.0f,
		0.0f, 1.0f
	};

	glBufferData(GL_ARRAY_BUFFER, sizeof(quad_data), quad_data, GL_STATIC_DRAW);

	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(8 * sizeof(float)));

	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);

	glLinkProgram(base_prog);

	char buf[1024];
	glGetProgramInfoLog(base_prog, 1024, NULL, buf);

	tc_rotate_loc = glGetUniformLocation(base_prog, "tc_rotate");

	vglImageData image;

	tex = vglLoadTexture("Media/cloud.dds", 0, &image);

	glTexParameteri(image.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

	vglUnloadImage(&image);
}
示例#4
0
void Ex09_08::InitGL()
{
	if (! LoadGL() )
		return;

	// Create a vertex array object
	GLuint vao;
	glGenVertexArrays( 1, &vao );
	glBindVertexArray( vao );

	// Create and initialize a buffer object
	enum { ArrayBuffer, ElementBuffer, NumVertexBuffers };
	GLuint buffers[NumVertexBuffers];
	glGenBuffers( NumVertexBuffers, buffers );
	glBindBuffer( GL_ARRAY_BUFFER, buffers[ArrayBuffer] );
	glBufferData( GL_ARRAY_BUFFER, sizeof(TeapotVertices),
		TeapotVertices, GL_STATIC_DRAW );

	glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, buffers[ElementBuffer] );
	glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof(TeapotIndices),
		TeapotIndices, GL_STATIC_DRAW );

	// Load shaders and use the resulting shader program
	ShaderInfo  shaders[] = {
		{ GL_VERTEX_SHADER,          "Shaders/teapot.vert" },
		{ GL_TESS_CONTROL_SHADER,    "Shaders/teapot.cont" },
		{ GL_TESS_EVALUATION_SHADER, "Shaders/teapot.eval" },
		{ GL_FRAGMENT_SHADER,        "Shaders/teapot.frag" },
		{ GL_NONE, NULL }
	};

	program = LoadShaders( shaders );
	glUseProgram( program );

	// set up vertex arrays
	GLuint vPosition = glGetAttribLocation( program, "vPosition" );
	glEnableVertexAttribArray( vPosition );
	glVertexAttribPointer( vPosition, 3, GL_DOUBLE, GL_FALSE, 0,
		BUFFER_OFFSET(0) );

	PLoc = glGetUniformLocation( program, "P" );
	MVLoc = glGetUniformLocation( program, "MV" );
	InnerLoc = glGetUniformLocation( program, "Inner" );
	OuterLoc = glGetUniformLocation( program, "Outer" );

	glUniform1f( InnerLoc, Inner );
	glUniform1f( OuterLoc, Outer );

	glPatchParameteri( GL_PATCH_VERTICES, NumTeapotVerticesPerPatch );

	glClearColor( 0.0, 0.0, 0.0, 1.0 );
	glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
}
示例#5
0
void Ex04_01::InitGL()
{
	if (! LoadGL() )
		return;

	glGenVertexArrays( NumVAOs, VAOs );
	glBindVertexArray( VAOs[Triangles] );

	struct VertexData {
		GLubyte color[4];
		GLfloat position[4];
	};

	VertexData vertices[NumVertices] = {
		{{ 255,   0,   0, 255 }, { -0.90, -0.90 }},  // Triangle 1
		{{   0, 255,   0, 255 }, {  0.85, -0.90 }},
		{{   0,   0, 255, 255 }, { -0.90,  0.85 }},
		{{  10,  10,  10, 255 }, {  0.90, -0.85 }},  // Triangle 2
		{{ 100, 100, 100, 255 }, {  0.90,  0.90 }},
		{{ 255, 255, 255, 255 }, { -0.85,  0.90 }}
	};

	glGenBuffers( NumBuffers, Buffers );
	glBindBuffer( GL_ARRAY_BUFFER, Buffers[ArrayBuffer] );
	glBufferData( GL_ARRAY_BUFFER, sizeof(vertices),
		vertices, GL_STATIC_DRAW );

	ShaderInfo  shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/gouraud.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/gouraud.frag" },
		{ GL_NONE, NULL }
	};

	GLuint program = LoadShaders( shaders );
	glUseProgram( program );

	glVertexAttribPointer( vColor, 4, GL_UNSIGNED_BYTE,
		GL_TRUE, sizeof(VertexData), BUFFER_OFFSET(0) );
	glVertexAttribPointer( vPosition, 2, GL_FLOAT,
		GL_FALSE, sizeof(VertexData),
		BUFFER_OFFSET(sizeof(vertices[0].color)) );

	glEnableVertexAttribArray( vColor );
	glEnableVertexAttribArray( vPosition );
}
示例#6
0
void Ex07_03::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  object_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh07_03.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh07_03.frag" },
		{ GL_NONE, NULL }
	};

	object_prog = LoadShaders( object_shaders );

	glLinkProgram(object_prog);

	object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");

	GLuint object_color_loc = glGetUniformLocation(object_prog, "VertexColor");
	GLuint object_ambient_loc = glGetUniformLocation(object_prog, "Ambient");
	GLuint object_LightColor_loc = glGetUniformLocation(object_prog, "LightColor");
	GLuint object_LightDirection_loc = glGetUniformLocation(object_prog, "LightDirection");
	GLuint object_HalfVector_loc = glGetUniformLocation(object_prog, "HalfVector");
	GLuint object_Shininess_loc = glGetUniformLocation(object_prog, "Shininess");
	GLuint object_Strength_loc = glGetUniformLocation(object_prog, "Strength");
	GLuint object_mat_normal_loc = glGetUniformLocation(object_prog, "NormalMatrix");

	glUseProgram(object_prog);	
	glUniform4fv(object_color_loc, 1, vmath::vec4(0.5f, 0.5f, 0.7f, 0.7f));
	glUniform3fv(object_ambient_loc, 1, vmath::vec3(0.2f, 0.2f, 0.5f));
	glUniform3fv(object_LightColor_loc, 1, vmath::vec3(0.3f, 0.3f, 1.0f));
	glUniform3fv(object_LightDirection_loc, 1, vmath::vec3(0.5f, 0.5f, -1.0f));
	glUniform3fv(object_HalfVector_loc, 1, vmath::vec3(1.0f, 1.0f, 0.0f));
	glUniform1f(object_Shininess_loc, 20.0f);
	glUniform1f(object_Strength_loc, 10.5f);

	GLfloat normal_matrix[3 * 3] = {
		0.5f, 0.0f, 0.0f,
		0.0f, 0.5f, 0.0f,
		0.0f, 0.0f, 1.0f
	};

	glUniformMatrix3fv(object_mat_normal_loc, 1, GL_TRUE, normal_matrix);

	object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}
示例#7
0
bool CGLTexture::Draw(int x,int y,int x2,int y2,u_char r,u_char g,u_char b,u_char r2,u_char g2,u_char b2) {
    if(!glBmap) { LoadGL(filename.c_str()); return false; }
    int x3=(x2-x);
    int y3=(y2-y);
    x=x/2;
    y=(-y/2)+(SDL_GetVideoSurface()->h/2);

    glDisable(GL_BLEND);
    glBlendFunc(GL_ONE, GL_ONE);
    glDisable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();

    gluOrtho2D(0,SDL_GetVideoSurface()->w,0,SDL_GetVideoSurface()->h);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glTranslated(x,y,0);
    glBindTexture(GL_TEXTURE_2D,glBmap);
    glColor3ub(r,g,b);

    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(float(x),      float(y-y3),    1);
    glTexCoord2f(1.0f, 0.0f);
    glVertex3f(float(x+x3),   float(y-y3),    1);
    glTexCoord2f(1.0f, 1.0f);
    glVertex3f(float(x+x3),   float(y),       1);
    glTexCoord2f(0.0f, 1.0f);
    glVertex3f(float(x),      float(y),       1);
    glEnd();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
    glEnable(GL_DEPTH_TEST);
    return 1;
}
示例#8
0
bool zglCoreContextWin::CreateCoreContext()
{
    if ( !m_tempContext )
        return false;

    bool makeCurResult = wglMakeCurrent( m_hDC, m_tempContext );

    bool bCore = GL_LoadCreateWinCoreContext();

    if (!bCore)
        return false;

    GetGLVersion(&m_major, &m_minor);

    if( !makeCurResult || m_major < MAJOR || ( m_major == MAJOR && m_minor < MINOR ) )
    {
        wglMakeCurrent(NULL,NULL);
        wglDeleteContext(m_tempContext);
        return false;
    }

    int attribs[] =
    {
        WGL_CONTEXT_MAJOR_VERSION_ARB, m_major,
        WGL_CONTEXT_MINOR_VERSION_ARB, m_minor,
        WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
        WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
        0
    };

    m_Context = wglCreateContextAttribsARB(m_hDC,0, attribs);

    if ( !m_Context )
        return false;

    LoadGL();

    wglMakeCurrent(NULL,NULL);
    wglDeleteContext(m_tempContext);

    return true;
}
示例#9
0
void Ex08_11::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  object_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh08_11.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh08_11.frag" },
		{ GL_NONE, NULL }
	};

	object_prog = LoadShaders( object_shaders );

	glLinkProgram(object_prog);
	
	object_mat_mv_loc = glGetUniformLocation(object_prog, "MVMatrix");
	object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");
	GLuint NormalMatrix_loc = glGetUniformLocation(object_prog, "NormalMatrix");
	GLuint LightPosition_loc = glGetUniformLocation(object_prog, "LightPosition");

	GLuint Color0_loc = glGetUniformLocation(object_prog, "Color0");
	GLuint Color1_loc = glGetUniformLocation(object_prog, "Color1");
	GLuint Frequency_loc = glGetUniformLocation(object_prog, "Frequency");

	glUseProgram(object_prog);	

	GLfloat normal_matrix[3 * 3] = {
		0.5f, 0.0f, 0.0f,
		0.0f, 0.5f, 0.0f,
		0.0f, 0.0f, 1.0f
	};

	glUniformMatrix3fv(NormalMatrix_loc, 1, GL_TRUE, normal_matrix);
	glUniform3fv(LightPosition_loc, 1, vmath::vec3(0.0f, 0.0f, -1.0f));

	glUniform3fv(Color0_loc, 1, vmath::vec3(0.0f, 0.0f, 0.7f));
	glUniform3fv(Color1_loc, 1, vmath::vec3(1.0f, 1.0f, 1.0f));
	glUniform1f(Frequency_loc, 24.0f);

	object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}
示例#10
0
void Ex08_01::InitGL()
{
    if (! LoadGL() )
        return;

    ShaderInfo  object_shaders[] = {
        { GL_VERTEX_SHADER, "Shaders/sh08_01.vert" },
        { GL_FRAGMENT_SHADER, "Shaders/sh08_01.frag" },
        { GL_NONE, NULL }
    };

    object_prog = LoadShaders( object_shaders );

    glLinkProgram(object_prog);


    GLuint LightPosition_loc = glGetUniformLocation(object_prog, "LightPosition");
    GLuint LightColor_loc = glGetUniformLocation(object_prog, "LightColor");
    GLuint EyePosition_loc = glGetUniformLocation(object_prog, "EyePosition");
    GLuint Specular_loc = glGetUniformLocation(object_prog, "Specular");
    GLuint Ambient_loc = glGetUniformLocation(object_prog, "Ambient");

    GLuint Kd_loc = glGetUniformLocation(object_prog, "Kd");
    object_mat_mv_loc = glGetUniformLocation(object_prog, "MVMatrix");
    object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");
    GLuint NormalMatrix_loc = glGetUniformLocation(object_prog, "NormalMatrix");

    GLuint StripeColor_loc = glGetUniformLocation(object_prog, "StripeColor");
    GLuint BackColor_loc = glGetUniformLocation(object_prog, "BackColor");

    GLuint Width_loc = glGetUniformLocation(object_prog, "Width");
    GLuint Fuzz_loc = glGetUniformLocation(object_prog, "Fuzz");
    GLuint Scale_loc = glGetUniformLocation(object_prog, "Scale");

    glUseProgram(object_prog);

    glUniform3fv(LightPosition_loc, 1, vmath::vec3(0.5f, 0.5f, -1.0f));
    glUniform3fv(LightColor_loc, 1, vmath::vec3(1.0f, 1.0f, 1.0f));
    glUniform3fv(EyePosition_loc, 1, vmath::vec3(-0.5f, -0.5f, 1.0f));
    glUniform3fv(Specular_loc, 1, vmath::vec3(0.1f, 0.1f, 0.1f));
    glUniform4fv(Ambient_loc, 1, vmath::vec4(1.0f, 1.0f, 1.0f, 1.0f));

    glUniform1f(Kd_loc, 1.0f);

    GLfloat normal_matrix[3 * 3] = {
        0.5f, 0.0f, 0.0f,
        0.0f, 0.5f, 0.0f,
        0.0f, 0.0f, 1.0f
    };

    glUniformMatrix3fv(NormalMatrix_loc, 1, GL_TRUE, normal_matrix);

    glUniform3fv(StripeColor_loc, 1, vmath::vec3(0.0f, 0.0f, 0.7f));
    glUniform3fv(BackColor_loc, 1, vmath::vec3(1.0f, 1.0f, 1.0f));

    glUniform1f(Width_loc, 0.5f);
    glUniform1f(Fuzz_loc, 0.1f);
    glUniform1f(Scale_loc, 20.0f);

    object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}
示例#11
0
void Ex06_14::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  base_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh06_14.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh06_14.frag" },
		{ GL_NONE, NULL }
	};

	base_prog = LoadShaders( base_shaders );

	glGenBuffers(1, &quad_vbo);
	glBindBuffer(GL_ARRAY_BUFFER, quad_vbo);

	static const GLfloat quad_data[] =
	{
		1.0f, -1.0f,
		-1.0f, -1.0f,
		-1.0f, 1.0f,
		1.0f, 1.0f,

		0.0f, 0.0f,
		1.0f, 0.0f,
		1.0f, 1.0f,
		0.0f, 1.0f
	};

	glBufferData(GL_ARRAY_BUFFER, sizeof(quad_data), quad_data, GL_STATIC_DRAW);

	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(8 * sizeof(float)));

	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);

	glLinkProgram(base_prog);

	char buf[1024];
	glGetProgramInfoLog(base_prog, 1024, NULL, buf);

	// prog is the name of a linked program containing our example
	// vertex and fragment shaders
	glUseProgram(base_prog);
	// For the first texture, we will use texture unit 0...
	// Get the uniform location
	GLint tex1_uniform_loc = glGetUniformLocation(base_prog, "tex1");
	// Set it to 0
	glUniform1i(tex1_uniform_loc, 0);
	// Select texture unit 0
	glActiveTexture(GL_TEXTURE0);
	// Bind a texture to it
	glBindTexture(GL_TEXTURE_2D, tex1);
	// Repeat the above process for texture unit 1
	GLint tex2_uniform_loc = glGetUniformLocation(base_prog, "tex2");
	glUniform1i(tex2_uniform_loc, 1);
	glActiveTexture(GL_TEXTURE1);
	glBindTexture(GL_TEXTURE_2D, tex2);

 	time_loc = glGetUniformLocation(base_prog, "time");

	vglImageData image;
 
	tex1 = vglLoadTexture("Media/test.dds", 0, &image);

	glTexParameteri(image.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

	vglUnloadImage(&image);

	tex2 = vglLoadTexture("Media/test3.dds", 0, &image);

	vglUnloadImage(&image);
}
示例#12
0
文件: glimp.c 项目: Jenco420/q2pro
/*
VID_Init

This routine is responsible for initializing the OS specific portions
of OpenGL.  Under Win32 this means dealing with the pixelformats and
doing the wgl interface stuff.
*/
qboolean VID_Init(void)
{
    const char *extensions;
    int ret;

    gl_driver = Cvar_Get("gl_driver", "opengl32", CVAR_ARCHIVE | CVAR_REFRESH);
    gl_drawbuffer = Cvar_Get("gl_drawbuffer", "GL_BACK", 0);
    gl_swapinterval = Cvar_Get("gl_swapinterval", "1", CVAR_ARCHIVE);
    gl_allow_software = Cvar_Get("gl_allow_software", "0", 0);
    gl_colorbits = Cvar_Get("gl_colorbits", "0", CVAR_REFRESH);
    gl_depthbits = Cvar_Get("gl_depthbits", "0", CVAR_REFRESH);
    gl_stencilbits = Cvar_Get("gl_stencilbits", "8", CVAR_REFRESH);
    gl_multisamples = Cvar_Get("gl_multisamples", "0", CVAR_REFRESH);

    // don't allow absolute or relative paths
    FS_SanitizeFilenameVariable(gl_driver);

    // load and initialize the OpenGL driver
    ret = LoadGL(gl_driver->string);

    // attempt to recover if this was a minidriver
    if (ret == FAIL_SOFT && glw.minidriver) {
        Com_Printf("...falling back to opengl32\n");
        Cvar_Reset(gl_driver);
        ret = LoadGL(gl_driver->string);
    }

    // it failed, abort
    if (ret)
        return qfalse;

    // initialize WGL extensions
    WGL_InitExtensions(QWGL_ARB_extensions_string);

    if (qwglGetExtensionsStringARB)
        extensions = qwglGetExtensionsStringARB(win.dc);
    else
        extensions = NULL;

    // fall back to GL_EXTENSIONS for legacy drivers
    if (!extensions || !*extensions)
        extensions = (const char *)qwglGetString(GL_EXTENSIONS);

    glw.extensions = WGL_ParseExtensionString(extensions);

    if (glw.extensions & QWGL_EXT_swap_control) {
        if (glw.extensions & QWGL_EXT_swap_control_tear)
            Com_Printf("...enabling WGL_EXT_swap_control(_tear)\n");
        else
            Com_Printf("...enabling WGL_EXT_swap_control\n");
        WGL_InitExtensions(QWGL_EXT_swap_control);
        gl_swapinterval->changed = gl_swapinterval_changed;
        gl_swapinterval_changed(gl_swapinterval);
    } else {
        Com_Printf("WGL_EXT_swap_control not found\n");
        Cvar_Set("gl_swapinterval", "0");
    }

    gl_drawbuffer->changed = gl_drawbuffer_changed;
    gl_drawbuffer_changed(gl_drawbuffer);

    VID_SetMode();

    return qtrue;
}
示例#13
0
void Ex08_13::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  object_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh08_13.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh08_13.frag" },
		{ GL_NONE, NULL }
	};

	object_prog = LoadShaders( object_shaders );

	glGenBuffers(1, &quad_vbo);
	glBindBuffer(GL_ARRAY_BUFFER, quad_vbo);

	static const GLfloat quad_data[] =
	{
		0.75f, -0.75f,
		-0.75f, -0.75f,
		-0.75f, 0.75f,
		0.75f, 0.75f,

		0.0f, 0.0f,
		1.0f, 0.0f,
		1.0f, 1.0f,
		0.0f, 1.0f,

		0.0f, 0.0f, 1.0f,
		0.0f, 0.0f, 1.0f,
		0.0f, 0.0f, 1.0f,
		0.0f, 0.0f, 1.0f
	};

	glBufferData(GL_ARRAY_BUFFER, sizeof(quad_data), quad_data, GL_STATIC_DRAW);

	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(8 * sizeof(float)));
	glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET((8 + 8) * sizeof(float)));

	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);

	glLinkProgram(object_prog);
	
	object_mat_mv_loc = glGetUniformLocation(object_prog, "MVMatrix");
	object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");
	GLuint NormalMatrix_loc = glGetUniformLocation(object_prog, "NormalMatrix");
	GLuint LightPosition_loc = glGetUniformLocation(object_prog, "LightPosition");

	GLuint Color0_loc = glGetUniformLocation(object_prog, "Color0");
	GLuint Color1_loc = glGetUniformLocation(object_prog, "Color1");
	GLuint AvgColor_loc = glGetUniformLocation(object_prog, "AvgColor");
	GLuint Frequency_loc = glGetUniformLocation(object_prog, "Frequency");

	glUseProgram(object_prog);	

	GLfloat normal_matrix[3 * 3] = {
		0.5f, 0.0f, 0.0f,
		0.0f, 0.5f, 0.0f,
		0.0f, 0.0f, 1.0f
	};

	glUniformMatrix3fv(NormalMatrix_loc, 1, GL_TRUE, normal_matrix);
	glUniform3fv(LightPosition_loc, 1, vmath::vec3(0.0f, 0.0f, -1.0f));

	glUniform3fv(Color0_loc, 1, vmath::vec3(0.0f, 0.0f, 0.7f));
	glUniform3fv(Color1_loc, 1, vmath::vec3(1.0f, 1.0f, 0.0f));
	glUniform3fv(AvgColor_loc, 1, vmath::vec3(1.0f, 1.0f, 1.0f));
	glUniform1f(Frequency_loc, 3.0f);
}
示例#14
0
void Ex08_07::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  object_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh08_07.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh08_07.frag" },
		{ GL_NONE, NULL }
	};

	object_prog = LoadShaders( object_shaders );

	glLinkProgram(object_prog);

// 	uniform vec4 MCBallCenter;
// 	uniform mat4 MVMatrix;
// 	uniform mat4 MVPMatrix;
// 	uniform mat3 NormalMatrix;

	object_mat_mv_loc = glGetUniformLocation(object_prog, "MVMatrix");
	object_mat_mvp_loc = glGetUniformLocation(object_prog, "MVPMatrix");
	GLuint NormalMatrix_loc = glGetUniformLocation(object_prog, "NormalMatrix");
	GLuint MCBallCenter_loc = glGetUniformLocation(object_prog, "MCBallCenter");

// 	uniform vec4 HalfSpace[5]; // half-spaces used to define star pattern
// 	uniform float StripeWidth;
// 	uniform float InOrOutInit; // -3.0
// 	uniform float FWidth; // = 0.005
// 
// 	uniform vec4 StarColor;
// 	uniform vec4 StripeColor;
// 	uniform vec4 BaseColor;
// 
// 	uniform vec4 LightDir; // light direction, should be normalized
// 	uniform vec4 HVector; // reflection vector for infinite light
// 	uniform vec4 SpecularColor;
// 	uniform float SpecularExponent;
// 
// 	uniform float Ka;
// 	uniform float Kd;
// 	uniform float Ks;

	GLuint HalfSpace0_loc = glGetUniformLocation(object_prog, "HalfSpace[0]");
	GLuint HalfSpace1_loc = glGetUniformLocation(object_prog, "HalfSpace[1]");
	GLuint HalfSpace2_loc = glGetUniformLocation(object_prog, "HalfSpace[2]");
	GLuint HalfSpace3_loc = glGetUniformLocation(object_prog, "HalfSpace[3]");
	GLuint HalfSpace4_loc = glGetUniformLocation(object_prog, "HalfSpace[4]");

	GLuint StripeWidth_loc = glGetUniformLocation(object_prog, "StripeWidth");
	GLuint InOrOutInit_loc = glGetUniformLocation(object_prog, "InOrOutInit");
	GLuint FWidth_loc = glGetUniformLocation(object_prog, "FWidth");

	GLuint StarColor_loc = glGetUniformLocation(object_prog, "StarColor");
	GLuint StripeColor_loc = glGetUniformLocation(object_prog, "StripeColor");
	GLuint BaseColor_loc = glGetUniformLocation(object_prog, "BaseColor");

	GLuint LightDir_loc = glGetUniformLocation(object_prog, "LightDir");
	GLuint HVector_loc = glGetUniformLocation(object_prog, "HVector");
	GLuint SpecularColor_loc = glGetUniformLocation(object_prog, "SpecularColor");
	GLuint SpecularExponent_loc = glGetUniformLocation(object_prog, "SpecularExponent");

	GLuint Ka_loc = glGetUniformLocation(object_prog, "Ka");
	GLuint Kd_loc = glGetUniformLocation(object_prog, "Kd");
	GLuint Ks_loc = glGetUniformLocation(object_prog, "Ks");

	glUseProgram(object_prog);	
	
	GLfloat normal_matrix[3 * 3] = {
		0.5f, 0.0f, 0.0f,
		0.0f, 0.5f, 0.0f,
		0.0f, 0.0f, 1.0f
	};

	glUniformMatrix3fv(NormalMatrix_loc, 1, GL_TRUE, normal_matrix);

	glUniform4fv(MCBallCenter_loc, 1, vmath::vec4(0.0f, 0.0f, 0.0f, 1.0f));

	glUniform4fv(HalfSpace0_loc, 1, vmath::vec4(1.0, 0.0, 0.0, 0.2));
	glUniform4fv(HalfSpace1_loc, 1, vmath::vec4(0.309016994, 0.951056516, 0.0, 0.2));
	glUniform4fv(HalfSpace2_loc, 1, vmath::vec4(-0.809016994, 0.587785252, 0.0, 0.2));
	glUniform4fv(HalfSpace3_loc, 1, vmath::vec4(-0.809016994, -0.587785252, 0.0, 0.2));
	glUniform4fv(HalfSpace4_loc, 1, vmath::vec4(0.309016994, -0.951056516, 0.0, 0.2));

	glUniform1f(StripeWidth_loc, 0.3);
	glUniform1f(InOrOutInit_loc, -3.0);
	glUniform1f(FWidth_loc, 0.005);

	glUniform4fv(StarColor_loc, 1, vmath::vec4(0.6, 0.0, 0.0, 1.0));
	glUniform4fv(StripeColor_loc, 1, vmath::vec4(0.0, 0.3, 0.6, 1.0));
	glUniform4fv(BaseColor_loc, 1, vmath::vec4(0.6, 0.5, 0.0, 1.0));

	glUniform4fv(LightDir_loc, 1, vmath::vec4(0.57735, 0.57735, 0.57735, 0.0));
	glUniform4fv(HVector_loc, 1, vmath::vec4(0.32506, 0.32506, 0.88808, 0.0));
	glUniform4fv(SpecularColor_loc, 1, vmath::vec4(1.0, 1.0, 1.0, 1.0));
	glUniform1f(SpecularExponent_loc, 200.0);

	glUniform1f(Ka_loc, 0.3);
	glUniform1f(Kd_loc, 0.7);
	glUniform1f(Ks_loc, 0.4);

	object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}
示例#15
0
void Ex06_02::InitGL()
{
	if (! LoadGL() )
		return;

	ShaderInfo  base_shaders[] = {
		{ GL_VERTEX_SHADER, "Shaders/sh06_02.vert" },
		{ GL_FRAGMENT_SHADER, "Shaders/sh06_02.frag" },
		{ GL_NONE, NULL }
	};

	base_prog = LoadShaders( base_shaders );

	glGenBuffers(1, &quad_vbo);
	glBindBuffer(GL_ARRAY_BUFFER, quad_vbo);

	static const GLfloat quad_data[] =
	{
		0.75f, -0.75f,
		-0.75f, -0.75f,
		-0.75f, 0.75f,
		0.75f, 0.75f,

		0.0f, 0.0f,
		1.0f, 0.0f,
		1.0f, 1.0f,
		0.0f, 1.0f
	};

	glBufferData(GL_ARRAY_BUFFER, sizeof(quad_data), quad_data, GL_STATIC_DRAW);

	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(8 * sizeof(float)));

	glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);

	glLinkProgram(base_prog);

	glGenTextures(1, &tex_checkerboard);
	glBindTexture(GL_TEXTURE_2D, tex_checkerboard);
	glTexStorage2D(GL_TEXTURE_2D, 4, GL_RGBA8, 8, 8);

	// The following is an 8x8 checkerboard pattern using
	// GL_RED, GL_UNSIGNED_BYTE data.
	static const unsigned char tex_checkerboard_data[] =
	{
		0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
		0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
		0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
		0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
		0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
		0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
		0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00,
		0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
	};

	glTexSubImage2D(GL_TEXTURE_2D,
		0,
		0, 0,
		8, 8,
		GL_RED, GL_UNSIGNED_BYTE,
		tex_checkerboard_data);

	static const GLint swizzles[] = { GL_RED, GL_RED, GL_RED, GL_ONE };
	glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzles);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

	glGenerateMipmap(GL_TEXTURE_2D);

	glGenTextures(1, &tex_color);
	glBindTexture(GL_TEXTURE_2D, tex_color);
	glTexStorage2D(GL_TEXTURE_2D, 2, GL_RGBA32F, 2, 2);

	// The following data represents a 2x2 texture with red,
	// green, blue, and yellow texels represented as GL_RGBA,
	// GL_FLOAT data.
	static const GLfloat tex_color_data[] =
	{
		// Red texel				Green texel
		1.0f, 0.0f, 0.0f, 1.0f,		0.0f, 1.0f, 0.0f, 1.0f,
		// Blue texel				Yellow texel
		0.0f, 0.0f, 1.0f, 1.0f,		1.0f, 1.0f, 0.0f, 1.0f
	};

	glTexSubImage2D(GL_TEXTURE_2D, // target
		0, // First mipmap level
		0, 0, // x and y offset
		2, 2, // width and height
		GL_RGBA, GL_FLOAT, // format and type
		tex_color_data); // data

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

	glGenerateMipmap(GL_TEXTURE_2D);
}
示例#16
0
CGLTexture::CGLTexture(string f) {
    Initialize();
    pLog=new CLog("texture.log");
    bMadeLog=true;
    LoadGL(f);
}
示例#17
0
void Ex11_04::InitGL()
{
	if (! LoadGL() )
		return;

	render_scene_prog = -1;
	resolve_program = -1;

	InitPrograms();

	// Create palette texture
	glGenBuffers(1, &image_palette_buffer);
	glBindBuffer(GL_TEXTURE_BUFFER, image_palette_buffer);
	glBufferData(GL_TEXTURE_BUFFER, 256 * 4 * sizeof(float), NULL, GL_STATIC_DRAW);
	glGenTextures(1, &image_palette_texture);
	glBindTexture(GL_TEXTURE_BUFFER, image_palette_texture);
	glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, image_palette_buffer);

	vmath::vec4 * data = (vmath::vec4 *)glMapBuffer(GL_TEXTURE_BUFFER, GL_WRITE_ONLY);
	for (int i = 0; i < 256; i++)
	{
		data[i] = vmath::vec4((float)i);
	}
	glUnmapBuffer(GL_TEXTURE_BUFFER);

	// Create head pointer texture
	glActiveTexture(GL_TEXTURE0);
	glGenTextures(1, &output_texture);
	glBindTexture(GL_TEXTURE_2D, output_texture);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, MAX_FRAMEBUFFER_WIDTH, MAX_FRAMEBUFFER_HEIGHT, 0, GL_RGBA, GL_FLOAT, NULL);
	glBindTexture(GL_TEXTURE_2D, 0);

	glBindImageTexture(0, output_texture, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA32F);

	// Create buffer for clearing the head pointer texture
	glGenBuffers(1, &output_texture_clear_buffer);
	glBindBuffer(GL_PIXEL_UNPACK_BUFFER, output_texture_clear_buffer);
	glBufferData(GL_PIXEL_UNPACK_BUFFER, MAX_FRAMEBUFFER_WIDTH * MAX_FRAMEBUFFER_HEIGHT * sizeof(GLuint), NULL, GL_STATIC_DRAW);

	data = (vmath::vec4 *)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
	memset(data, 0x00, MAX_FRAMEBUFFER_WIDTH * MAX_FRAMEBUFFER_HEIGHT * sizeof(GLuint));
	glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);

	// Create VAO containing quad for the final blit
	glGenVertexArrays(1, &quad_vao);
	glBindVertexArray(quad_vao);

	static const GLfloat quad_verts[] =
	{
		-1.0f, -1.0f,
		1.0f, -1.0f,
		-1.0f,  1.0f,
		1.0f,  1.0f,
	};

	glGenBuffers(1, &quad_vbo);
	glBindBuffer(GL_ARRAY_BUFFER, quad_vbo);
	glBufferData(GL_ARRAY_BUFFER, sizeof(quad_verts), quad_verts, GL_STATIC_DRAW);
	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
	glEnableVertexAttribArray(0);

	glClearDepth(1.0f);

	object.LoadFromVBM("Media/torus.vbm", 0, 1, 2);
}