Ubuntu中,OpenGL直接渲染与使用着色器

本文档详细介绍了在Ubuntu系统中如何进行OpenGL的直接渲染操作,并逐步展示了如何利用着色器(vert和frag)提升图形渲染效果。通过glcommon.hpp和glcommon.cpp的设置,结合CMakeLists.txt构建项目,最后使用build.sh脚本进行编译和运行,实现了从基本渲染到着色器应用的完整流程。附带截图辅助理解。
摘要由CSDN通过智能技术生成

glcommon.hpp

#ifndef HJ_GLCOMMON_HPP_
#define HJ_GLCOMMON_HPP_

#include <stdio.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glut.h>

GLuint createGLProgram(const char *vertPath, const char *fragPath);

#endif /* HJ_GLCOMMON_HPP_ */

glcommon.cpp

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "glcommon.hpp"

static const char *readShaderFromFile(const char *path)
{
	FILE *fp;
	char *content = NULL;
	int count=0;
	if (path != NULL)
	{
		fp = fopen(path,"rt");
		if (fp != NULL)
		{
			fseek(fp, 0, SEEK_END);
			count = ftell(fp);
			rewind(fp);
			if (count > 0)
			{
				content = (char *)malloc(sizeof(char) * (count+1));
				count = fread(content,sizeof(char),count,fp);
				content[count] = '\0';
			}
			fclose(fp);
		}
	}
	return content;
}

static GLuint loadShader(int shaderType, const char *shaderPath)
{
	GLuint shader = glCreateShader(shaderType);
	char *shaderCode = (char *) readShaderFromFile(shaderPath);
	glShaderSource(shader, 1, &shaderCode, 0);//加载顶点着色器源码到 shader 中
	free(shaderCode);
	glCompileShader(shader);

	int infologLength = 0;
	int charsWritten = 0;
	char * infoLog;
	glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infologLength);//查询glsl里的日志的长度,如果长度为0表示没信息
	if (infologLength > 0)
	{
		infoLog = (char *) malloc(infologLength);
		glGetShaderInfoLog(shader, infologLength, &charsWritten, infoLog);//将日志写入到 infoLog 中,charsWritten为实际写入长度
		printf("loadShader type=%d, error : %d, %d, %s\n", shaderType, infologLength, charsWritten, infoLog);
		free(infoLog);
		shader = 0;
	}

	return shader;
}

GLuint createGLProgram(const char *vertPath, const char *fragPath)
{
	GLuint vert = loadShader(GL_VERTEX_SHADER, vertPath);
	GLuint frag = loadShader(GL_FRAGMENT_SHADER, fragPath);
	printf("vert=%u, frag=%u\n", vert, frag);
	if (vert==0 || frag==0) return 0;

	GLuint program = glCreateProgram();//创建着色器程序
	glAttachShader(program, vert);
	glAttachShader(program, frag);//将编译好的着色器放到着色器程序p中,着色器程序中可以放多个着色器
	glLinkProgr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值