- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在编译程序时遇到了问题,我找不到任何错误。有问题的代码和错误消息如下所示:
我的错误信息:
- 错误 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int c:\users\codasm\desktop\nowe projekty\glfwframework1\system.h 9 1 GLFWFramework1
- 错误 1 错误 C2143:语法错误:缺少“;”前 '' c:\users\codasm\desktop\nowe projekty\glfwframework1\system.h 9 1 GLFWFramework1*
将我链接到 System.h 第 9 行的错误消息,我不明白出了什么问题:
Shader* shader;
系统.h:
#ifndef System_h
#define System_h
#include "Core.h"
class System
{
GLFWwindow* window;
Shader* shader;
// GLuint shader;
GLenum error;
GLuint VAO, VBO, TBO;
vector<vec3> vertices;
vector<vec2> uvs;
vector<vec3> normals;
public:
System();
~System();
bool InitWindow();
bool InitExtensions();
bool InitShaders();
bool InitVertices();
bool InitTextures();
bool InitModels();
void Resize(GLFWwindow* window);
void BeginScene();
void EndScene(GLFWwindow* window);
void Display(GLFWwindow*);
void Run();
void ShutdownWindow();
void ShutdownShaders();
void ShutdownVertices();
void ShutdownTextures();
};
static void KeyPress(GLFWwindow* window, int key, int scancode, int action, int mods);
static void ErrorProc(int error, const char* description);
#endif
着色器.cpp:
#pragma once
#include "Core.h"
class Shader
{
GLuint shader;
public:
Shader(void);
~Shader(void);
bool ConfigureShaders(string vsName, string fsName);
void SetShaderVar(string name, mat4 MVP);
void EnableShader(bool enable);
GLuint GetShader();
};
着色器.h:
#include "Shader.h"
Shader::Shader(void)
{
}
Shader::~Shader(void)
{
}
bool Shader::ConfigureShaders(string vsName, string fsName)
{
// Wielkosc buforow na bledy moze powodowac problemy w przypadku dluzszych komunikatow
// Utworz Shadery
GLuint VS = glCreateShader(GL_VERTEX_SHADER);
GLuint FS = glCreateShader(GL_FRAGMENT_SHADER);
// Czytaj Shadery
string LineBuffer;
fstream VSFile(vsName.c_str(),ios::in);
string VSSource;
if(VSFile.is_open())
{
while(getline(VSFile,LineBuffer))
VSSource += "\n"+LineBuffer;
VSFile.close();
}
fstream FSFile(fsName.c_str(),ios::in);
string FSSource;
if(FSFile.is_open())
{
LineBuffer.clear();
while(getline(FSFile,LineBuffer))
FSSource += "\n"+LineBuffer;
FSFile.close();
}
GLint result;
// int infoLogLength;
// Wprowadz, Kompiluj i Sprawdz Shadery
char const* VSSrc = VSSource.c_str();
glShaderSource(VS,1,&VSSrc,NULL);
glCompileShader(VS);
glGetShaderiv(VS,GL_COMPILE_STATUS,&result);
// glGetShaderiv(VS,GL_INFO_LOG_LENGTH,&infoLogLength);
char VSErrMsg[256];
glGetShaderInfoLog(VS,1024,NULL,VSErrMsg);
cout<<VSErrMsg<<endl;
char const* FSSrc = FSSource.c_str();
glShaderSource(FS,1,&FSSrc,NULL);
glCompileShader(FS);
glGetShaderiv(VS,GL_COMPILE_STATUS,&result);
// glGetShaderiv(VS,GL_INFO_LOG_LENGTH,&infoLogLength);
char FSErrMsg[256];
glGetShaderInfoLog(FS,1024,NULL,FSErrMsg);
cout<<FSErrMsg<<endl;
// Polacz Shadery
shader = glCreateProgram();
glAttachShader(shader,VS);
glAttachShader(shader,FS);
glBindAttribLocation(shader,0,"vertexPos");
glBindAttribLocation(shader,1,"vertexUV");
glLinkProgram(shader);
// Sprawdz Program
glGetProgramiv(shader,GL_LINK_STATUS,&result);
// glGetProgramiv(Shader,GL_INFO_LOG_LENGTH,&infoLogLength);
char PrgErrMsg[256];
glGetProgramInfoLog(shader,1024,NULL,PrgErrMsg);
cout<<PrgErrMsg<<endl;
// Kasuj Shadery
glDeleteShader(VS);
glDeleteShader(FS);
return true;
}
void Shader::SetShaderVar(string name, mat4 MVP)
{
GLuint MatrixLocation = glGetUniformLocation(shader,"MVP");
glUniformMatrix4fv(MatrixLocation,1,GL_FALSE,&MVP[0][0]);
}
void Shader::EnableShader(bool enable)
{
if(!shader)
{
if(enable)
glUseProgram(shader);
else
glUseProgram(0);
}
}
GLuint Shader::GetShader()
{
return shader;
}
最佳答案
在 System.h
中使用它之前,您尚未声明 Shader
。看起来你可以逃脱 forward declaration
class Shader;
在 class System
的定义之前,因为您只需要声明一个指向它的指针。如果您需要对类做任何花哨的事情,那么您需要包含标题以获得完整的定义;但你不需要在这里,所以你不应该。
关于c++ - Shader 类中的语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20246655/
我正在编写一个着色器,对场景渲染的纹理产生模糊效果。 我需要在 2 遍中做到这一点,所以通过 P0 进行水平模糊,并在 P1 中进行垂直模糊。 问题是: 我如何在 P0 channel 上获取 PS
我正在尝试从源代码运行 python 应用程序,它具有: from shader import ShaderProgram,ShaderCode 我不知道要下载+安装什么才能获得“着色器”。它非常不具
着色器编译成功,但程序在渲染开始后立即崩溃...这是我得到的错误:“着色器中没有名称为‘u_texture’的制服”。这是我的着色器的样子: #ifdef GL_ES precision medium
当我使用 xcode 8 在 ios 10 中运行我的应用程序时,我在调试控制台中收到以下消息,并且通过 UI 卡住,任何人都可以知道为什么会发生这种情况 ERROR /BuildRoot/Lib
我第一次实现延迟渲染/着色时遇到了一些我自己无法解决的问题:/。 同时渲染几何 channel 和延迟 channel 时,我得到了这个看起来很奇怪的输出 在设置拓扑、输入布局等之前,我在延迟传递的开
我正在为教程开发法线贴图实现,出于教学目的,我想将 TBN 矩阵传递给片段着色器(从顶点着色器),这样我就可以将切线空间中的法线 vector 转换为世界 -照明计算的空间。法线贴图应用于二维平面,其
我第一次尝试将 bool 值传递到我的顶点着色器中;到目前为止我只使用过 float 。 所讨论的 bool 值是特定于原语的,因此不能作为统一传递。然而,对于任何给定图元的所有顶点,它具有相同的值。
这两个是我的 VertexShader 和 Fragment Shader 文件: 顶点着色器文件: attribute vec4 position; attribute vec4 input
我正在尝试在 Unity 中创建线框顶点/片段着色器。根据 this paper 似乎可能.一般的想法似乎是将顶点着色器中计算的距离向量传递给片段着色器中的每个片段,它可以使用它来确定根据线框线在多边
当前正在制作游戏,并试图在单击“菜单”按钮时获得覆盖屏幕的覆盖层-我想这应该是相当普遍/简单的,但是在实现它时仍然有问题。 我当前的设置是: TiledMapRenderer:渲染TMX切片(背景/
什么是应用亮度和对比度的简单像素着色器脚本效果? 我找到了这个,但它似乎不正确: sampler2D input : register(s0); float brightness : register
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在编写一个 PixelShader(HLSL、SM40)并尝试在某些情况下完全跳过输出。我当前的代码如下所示: float4 PS( PS_INPUT input) : SV_Target {
我有一个变量,可以是负数,也可以是正数。 确保其始终为正值的一种方法是: if (var < 0) var = -var; 但是,我认为必须有一个着色器函数可以做到这一点。我正在使用 Cg,但是如果我
就会出现标准 Assets 效应Screen Space Ambient Obscurance不适用于正交相机。这很奇怪,因为基本 SSAO脚本工作得很好。我怀疑问题在于片段深度的计算错误。 有没有办
我需要 CG 片段着色器方面的帮助。我有一个大纹理可以容纳所有瓷砖。我真的不知道从哪里开始。 现在,当四边形/ Sprite 超过一定大小时,我需要重复纹理,因为它是一个纹理。 最佳答案 0Matth
对于运行时生成的着色器代码,我有兴趣探索是否可以直接自动生成编译的 Metal 着色器语言 (MSL) 代码(如 .metallib 文件,并与 newLibraryWithData:error: 方
我正在编写一个 PixelShader(HLSL、SM40)并尝试在某些情况下完全跳过输出。我当前的代码如下所示: float4 PS( PS_INPUT input) : SV_Target {
我有一个变量,它可以是负数也可以是正数。 确保它始终为正的一种方法是: if (var < 0) var = -var; 但是,我认为必须有一个着色器函数可以做到这一点。我正在使用 Cg,但是如果我知
在像素着色器中,您可以丢弃一个像素,但我想即使是为每个像素调用的快速失败着色器也需要花费大量时间?顶点着色器有什么办法可以丢弃整个三角形......我很确定VS无法访问图元但是有什么技巧可以让我们得到
我是一名优秀的程序员,十分优秀!