小编Rob*_*rto的帖子

static_cast从Derived*到void*到Base*

我想将指向派生类的成员的void*指针转换为基类的指针,如下例所示:

#include <iostream>

class Base
{
    public:
       void function1(){std::cout<<"1"<<std::endl;}
       virtual void function2()=0;
};

class Derived : public Base
{
    public:
       virtual void function2(){std::cout<<"2"<<std::endl;}
};

int main()
{
    Derived d;
    void ptr* = static_cast<void*>(&d);
    Base* baseptr=static_cast<Base*>(ptr);
    baseptr->function1();
    baseptr->function2(); 
}
Run Code Online (Sandbox Code Playgroud)

这将编译并给出了期望的结果(打印12分别),但它是保证工作?static_cast我在这里找到的描述:http://en.cppreference.com/w/cpp/language/static_cast 仅提到转换为void*指向同一类的指针(第10点).

c++ static-cast

7
推荐指数
1
解决办法
1144
查看次数

使用GLFW3在OpenGL上下文之间共享纹理不起作用

以下程序应该:

  1. 创建一个不可见的 GLFWwindow* masterWindow
  2. 从文件加载纹理,而活动的OpenGL上下文是与之关联的 masterWindow
  3. 创建一个GLFWwindow* childWindow,在此窗口的OpenGL上下文和masterWindow上下文之间激活共享
  4. 显示带有纹理的全窗四边形 childWindow

但是,这不起作用,即取代纹理,我得到显示的图形内存的随机片段childWindow.如果我childWindow在加载之前创建当前的上下文,那么显示纹理是有效的,这就是为什么我认为问题既不是我的着色器也不是我的纹理加载例程(我从这里开始,https://github.com/ DavidEGrayson/ahrs-visualizer/blob/master/png_texture.cpp).我明白我应该能够分享纹理(请参阅这个问题的答案:OpenGL - 用未来的上下文分享现有的纹理?),那么我做错了什么?在重要的情况下,我使用2008年末的Macbook,安装了NVIDIA 9400m和Mavericks/OpenGL 3.3.

#include <iostream>
#define GLEW_STATIC
#include <glew.h>
#include <glfw3.h>

const char* vShader =
  "#version 150 core\n"
  "in vec2 vertex;"
  "in vec2 vertexUV;"
  "out vec2 UV;"
  "void main() {gl_Position = vec4(vertex,0,1);UV=vertexUV;}";
const char* fShader =
 "#version 150 core\n"
 "uniform sampler2D sampler;"
 "in vec2 UV;"
 "out vec4 color;"
 "void main() {color = texture(sampler, UV);}";

GLuint …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glfw

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

释放glBufferData分配的内存是什么时候?

假设我为统一缓冲区分配内存,如下所示:

GLuint length(0x1000);
GLuint myBuffer;
glGenBuffers(1, &myBuffer);
glBindBuffer(GL_UNIFORM_BUFFER, myBuffer);
glBufferData(GL_UNIFORM_BUFFER, length, NULL, GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

当我使用缓冲区时,我想确保内存再次可用于其他缓冲区.是否足以呼吁glDeleteBuffers(1,&myBuffer)实现这一目标?因为我的直觉告诉我应该有一个对称的调用glBufferData(就像glInvalidateBufferData?在OpenGL 4中一样),但在文档中根本没有提到任何类型的调用glBufferData(http://www.opengl.org/sdk/docs/ man/xhtml/glBufferData.xml)

opengl

2
推荐指数
1
解决办法
2811
查看次数

标签 统计

c++ ×2

opengl ×2

glfw ×1

static-cast ×1