小编Tal*_*zig的帖子

将数据通过曲面细分着色器传递到片段着色器

我对着色器管道如何通过每个阶段传递数据感到困惑.

我要做的是通过glVertexAttrib4fv()曲面细分控制着色器,然后使用曲面细分评估着色器传递在顶点阶段加载的颜色数据,以便可以在片段着色器中使用它.我不确定我是否犯了某种概念上的错误(很可能,因为我仍然试图通过固定功能来解决这个问题),但无论如何,只要我尝试通过镶嵌着色器,我的原始人拒绝渲染.在此之前,我的原始渲染,但它只呈现黑色.我的着色器如下:

顶点着色器:

static const GLchar* vss[] =
    {
        "#version 430 core                                                  \n"
        "                                                                   \n"
        "layout (location = 0) in vec4 offset;                              \n"
        "layout (location = 1) in vec4 color;                               \n"
        "                                                                   \n"
        "out vec4 vs_color;                                                 \n"
        "                                                                   \n"
        "void main(void)                                                    \n"
        "{                                                                  \n"
        "   const vec4 vertices[] = vec4[](vec4( 0.25, -0.25, -0.5, 1.0),   \n"
        "                                  vec4(-0.25, -0.25, -0.5, 1.0),   \n"
        "                                  vec4( 0.25,  0.25, -0.5, 1.0));  \n"
        "                                                                   \n"
        "   gl_Position = vertices[gl_VertexID] + offset;                   \n"
        " …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl

8
推荐指数
1
解决办法
3248
查看次数

在C++中声明头文件中的全局结构

我在头文件中创建了一个结构,如下所示:

typedef struct
{
    GLfloat lgtR, lgtG, lgtB, lgtA;
    GLfloat x, y, z;
    bool islight;
    GLfloat width, height, depth;
    GLenum lightn;
    particle prt;
    int maxprt;
} emitter;
Run Code Online (Sandbox Code Playgroud)

这没有问题.

但是,在那个特定的头文件中,我想声明一个可以在所有函数中使用的全局发射器,它不是主源文件的一部分:

// header.h global declaration

emmiter currentEmit;

GLvoid glSetEmitter(emitter emitter)
{
    currentEmit = emitter;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我得到了很多"错误C2228:'.variable'的左边必须有class/struct/union,所以我假设它根本没有声明我的结构.

有没有办法在头文件中全局声明该结构,如果是这样,是否还有一种方法可以防止它成为其他.cpp文件的一部分?

c++ opengl structure declaration global-variables

0
推荐指数
1
解决办法
1450
查看次数

标签 统计

c++ ×2

opengl ×2

declaration ×1

global-variables ×1

glsl ×1

shader ×1

structure ×1