Explorar o código

fix: 设置 glEnableVertexAttribArray 按顺序激活

nicetry12138 hai 1 ano
pai
achega
61701db76b

+ 2 - 2
图形学/OpenGL学习/src/OpenGLStudy/OpenGLStudy/src/IndexBuffer.cpp

@@ -16,10 +16,10 @@ IndexBuffer::~IndexBuffer()
 
 void IndexBuffer::Bind() const
 {
-	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_RendererID);
+	GL_CALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_RendererID));
 }
 
 void IndexBuffer::Unbind() const
 {
-	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+	GL_CALL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0));
 }

+ 11 - 11
图形学/OpenGL学习/src/OpenGLStudy/OpenGLStudy/src/Shader.cpp

@@ -17,12 +17,12 @@ Shader::~Shader()
 
 void Shader::Bind() const
 {
-	glUseProgram(m_ShaderId);
+	GL_CALL(glUseProgram(m_ShaderId));
 }
 
 void Shader::Unbind() const
 {
-	glUseProgram(0);
+	GL_CALL(glUseProgram(0));
 }
 
 void Shader::SetUniform4f(const std::string& name, float v0, float v1, float v2, float v3)
@@ -49,7 +49,7 @@ GLint Shader::GetUniformLocation(const std::string& name)
 		std::cout << "Warning: uniform " << name << " doesn't exist" << std::endl;
 	}
 
-	m_Locations[name] = location;	// 如果没找到 会一直找不到 所以不用 else 判断
+	m_Locations[name] = location;	// 濡傛灉娌℃壘鍒� 浼氫竴鐩存壘涓嶅埌 鎵€浠ヤ笉鐢� else 鍒ゆ柇
 	return location;
 }
 
@@ -82,13 +82,13 @@ GLuint Shader::CreateShader(const std::string& vertexSource, const std::string&
 	GLuint vs = CompileShader(vertexSource, GL_VERTEX_SHADER);
 	GLuint fs = CompileShader(fragmentSource, GL_FRAGMENT_SHADER);
 
-	glAttachShader(program, vs);	// 绑定顶点着色器
-	glAttachShader(program, fs);	// 绑定片段着色器
-	glLinkProgram(program);			// 链接程序,将所有着色器合并为一个可执行的程序
-	glValidateProgram(program);		// 验证程序对象是否可以在当前的 OpenGL 状态下执行
+	GL_CALL(glAttachShader(program, vs));	// 缁戝畾椤剁偣鐫€鑹插櫒
+	GL_CALL(glAttachShader(program, fs));	// 缁戝畾鐗囨�鐫€鑹插櫒
+	GL_CALL(glLinkProgram(program));			// 閾炬帴绋嬪簭锛屽皢鎵€鏈夌潃鑹插櫒鍚堝苟涓轰竴涓�彲鎵ц�鐨勭▼搴�
+	GL_CALL(glValidateProgram(program));		// 楠岃瘉绋嬪簭瀵硅薄鏄�惁鍙�互鍦ㄥ綋鍓嶇殑 OpenGL 鐘舵€佷笅鎵ц�
 
-	glDeleteShader(fs);				// 删除着色器对象 因为一旦着色器被链接到程序对象,着色器的代码已经被链接到程序中,所以可以安全地删除着色器对象
-	glDeleteShader(vs);
+	GL_CALL(glDeleteShader(fs));				// 鍒犻櫎鐫€鑹插櫒瀵硅薄 鍥犱负涓€鏃︾潃鑹插櫒琚�摼鎺ュ埌绋嬪簭瀵硅薄锛岀潃鑹插櫒鐨勪唬鐮佸凡缁忚�閾炬帴鍒扮▼搴忎腑锛屾墍浠ュ彲浠ュ畨鍏ㄥ湴鍒犻櫎鐫€鑹插櫒瀵硅薄
+	GL_CALL(glDeleteShader(vs));
 
 	return program;
 }
@@ -100,13 +100,13 @@ GLuint Shader::CompileShader(const std::string& source, GLenum inType)
 	glShaderSource(id, 1, &src, nullptr);
 	glCompileShader(id);
 
-	// Shader 错误处理
+	// Shader 閿欒�澶勭悊
 	GLint result;
 	glGetShaderiv(id, GL_COMPILE_STATUS, &result);
 	if (result == GL_FALSE) {
 		int length;
 		glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length);
-		// alloca 在栈上申请内存,不需要 free ,在作用域结束后自动释放
+		// alloca 鍦ㄦ爤涓婄敵璇峰唴瀛橈紝涓嶉渶瑕� free 锛屽湪浣滅敤鍩熺粨鏉熷悗鑷�姩閲婃斁
 		char* msg = (char*)alloca(length * sizeof(char));
 		glGetShaderInfoLog(id, length, &length, msg);
 		std::cout << "Shader Compile " << (inType == GL_VERTEX_SHADER ? "vertex shader" : "fragment shader") << " Fail" << std::endl;

+ 9 - 9
图形学/OpenGL学习/src/OpenGLStudy/OpenGLStudy/src/Texture.cpp

@@ -12,13 +12,13 @@ Texture::Texture(const std::string& filePath)
 	GL_CALL(glGenTextures(1, &m_RenderID));
 	GL_CALL(glBindTexture(GL_TEXTURE_2D, m_RenderID));
 
-	// 一定要设置的纹理 否则只能得到黑色纹理
-	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));	// 指定缩小器
-	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));	// 指定放大器
+	// 涓€瀹氳�璁剧疆鐨勭汗鐞� 鍚﹀垯鍙�兘寰楀埌榛戣壊绾圭悊
+	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));	// 鎸囧畾缂╁皬鍣�
+	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));	// 鎸囧畾鏀惧ぇ鍣�
 	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
 	GL_CALL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
 
-	// 传递数据 GL_RGBA8 后面加8 用与表示每个通道站多少位
+	// 浼犻€掓暟鎹� GL_RGBA8 鍚庨潰鍔�8 鐢ㄤ笌琛ㄧず姣忎釜閫氶亾绔欏�灏戜綅
 	GL_CALL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_LocalBuffer));
 
 	GL_CALL(glBindTexture(GL_TEXTURE_2D, 0));
@@ -35,17 +35,17 @@ Texture::~Texture()
 		stbi_image_free(m_LocalBuffer);
 	}
 
-	glDeleteTextures(1, &m_RenderID);
+	GL_CALL(glDeleteTextures(1, &m_RenderID));
 }
 
 void Texture::Bind(unsigned int slot) const
 {
-	// 激活插槽 将贴图绑定到对应插槽中
-	glActiveTexture(GL_TEXTURE0 + slot);
-	glBindTexture(GL_TEXTURE_2D, m_RenderID);
+	// 婵€娲绘彃妲� 灏嗚创鍥剧粦瀹氬埌瀵瑰簲鎻掓Ы涓�
+	GL_CALL(glActiveTexture(GL_TEXTURE0 + slot));
+	GL_CALL(glBindTexture(GL_TEXTURE_2D, m_RenderID));
 }
 
 void Texture::Unbind() const
 {
-	glBindTexture(GL_TEXTURE_2D, 0);
+	GL_CALL(glBindTexture(GL_TEXTURE_2D, 0));
 }

+ 1 - 1
图形学/OpenGL学习/src/OpenGLStudy/OpenGLStudy/src/VertexArray.cpp

@@ -25,7 +25,7 @@ void VertexArray::AddBuffer(const VertexBuffer& vb, const VertexBufferLayout& la
 
 	for (unsigned int index = 0; index < elements.size(); ++index) {
 		const auto& element = elements[index];
-		GL_CALL(glEnableVertexAttribArray(0));
+		GL_CALL(glEnableVertexAttribArray(index));	// 激活第 Index 个布局
 		GL_CALL(glVertexAttribPointer(index, element.count, element.type, element.normalized, layout.GetStride(), (const void*)offset));
 		offset += element.count * VertexBufferElement::GetSizeOfType(element.type);
 	}