小编Hug*_*urd的帖子

如何在GLFW 3中创建OpenGL 3.3上下文

我编写了一个简单的OpenGL 3.3程序,它应该基于本教程渲染一个三角形,除了我使用GLFW创建窗口和上下文,而不是从头开始.另外,我正在使用Ubuntu.

虽然三角形没有渲染,但我只是得到一个黑屏.函数类似于glClearColor()并且glClear()似乎完全正常工作,但渲染三角形的代码却没有.以下是它的相关部分:

#define GLFW_INCLUDE_GL_3
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main ()
{
  glfwInit();

  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

  GLFWwindow* window = glfwCreateWindow(800, 600, "GLFW test", NULL, NULL);

  glfwMakeContextCurrent(window);

  glewExperimental = GL_TRUE;
  glewInit();

  float vertices[] = {-0.5f, -0.5f, 0.0f, 0.5f, 0.5f, -0.5f};

  GLuint VBOid[1];

  glClear(GL_COLOR_BUFFER_BIT);

  glGenBuffers(1, VBOid);
  glBindBuffer(GL_ARRAY_BUFFER, VBOid[0]);
  glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), vertices, GL_STATIC_DRAW);

  glEnableVertexAttribArray(0);

  glBindBuffer(GL_ARRAY_BUFFER, VBOid[0]);
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
  glDrawArrays(GL_TRIANGLES, 0, 3);

  ...
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

opengl glfw

5
推荐指数
1
解决办法
8804
查看次数

Makefile头依赖项

我是使用make的新手,并且通过本教程学习了基础知识.这是教程中最后一个示例makefile示例:

IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

LIBS=-lm

_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = hellomake.o hellofunc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: %.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

hellomake: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 
Run Code Online (Sandbox Code Playgroud)

这应该可以正常工作,假设所有.c文件只包含hellomake.h,但如果每个.c文件包含不同的标题,它将无法正常工作.是否可以编写一个知道每个.c文件包含什么的makefile,所以我不必像以下那样手动执行:

foo.o: foo.c something.h
    ...

bar.o: bar.c somethingelse.h
    ...
Run Code Online (Sandbox Code Playgroud)

因为这似乎是浪费大量时间.

makefile

4
推荐指数
1
解决办法
8360
查看次数

函数参数是否保证在堆栈上传递?

假设函数参数将在堆栈上顺序传递是否安全?

例如,无论编译器设置如何,都foo保证输出x y z

void foo(int x, int y, int z) {
    int *vector = &x;
    for(int i = 0; i < 3; i++) {
        std::cout << vector[i] << " ";
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用visual studio并且它确实有效,但我不确定这种行为是否得到保证.

c++ undefined-behavior language-lawyer

0
推荐指数
2
解决办法
119
查看次数