- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试运行一个简单的 VBO。但是当我调用
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*vertexcount, vertices, GL_STATIC_DRAW);
它只是崩溃,但只有当顶点数超过 1531 时才会崩溃。是的,“顶点”数组存储,或者更确切地说,分配了足够的空间,用于超过 1531 个元素。这是我的顶点结构:
typedef struct{
float x, y, z;
float nx, ny, nz;
float u, v;
}Vertex, vertex;
所以应该是32字节。32 字节 * 1531 = 48992 字节 = 48kb。
但是 48kb 对于普通的 VBO 来说似乎并不太高?我不明白发生了什么。
编辑:
Windows Xp 32 位服务包 3
英伟达 GeForce 9800GT 1024mb
编辑2:我的完整代码的简短版本:(有趣的部分在底部)
#include <windows.h>
#include <glew.h>
#include <wglew.h>
#include <gl3.h>
#include <gl/glu.h>
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
typedef struct{
float x, y, z;
float nx, ny, nz;
float u, v;
}Vertex, vertex;
typedef struct{
int first, second, third;
}VertexIndex, vertexindex, vindex, Vindex;
typedef struct{
unsigned int vao;
unsigned int vertexcount, indexcount;
}Mesh, mesh;
typedef struct{
HWND hwnd;
HDC hdc;
HGLRC hrc;
}GLWindow, Window, window;
void WindowShenanigans(Window *w, HINSTANCE *hinstance, WNDPROC WindowProc)
{
HWND tmp_hwnd;
WNDCLASS wndclass;
ZeroMemory(&wndclass, sizeof(WNDCLASS));
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_GLOBALCLASS;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.lpszMenuName = 0;
wndclass.hIcon = 0;
wndclass.hInstance = *hinstance;
wndclass.lpszClassName = "glclass";
wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE);
wndclass.hCursor = LoadCursor(0, IDC_ARROW);
wndclass.lpfnWndProc = WindowProc;
if(RegisterClass(&wndclass) == 0)
{
return;
}
ShowCursor(TRUE);
tmp_hwnd = CreateWindowA ( "glclass",
"bla",
WS_BORDER | WS_CAPTION | WS_SYSMENU,
0, 0,
600,
800,
HWND_DESKTOP,
NULL,
hinstance,
NULL);
w->hwnd = tmp_hwnd;
unsigned int PixelFormat;
PIXELFORMATDESCRIPTOR pfd;
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 16;
pfd.cStencilBits = 32;
pfd.iLayerType = PFD_MAIN_PLANE;
w->hdc = GetDC(w->hwnd);
PixelFormat = ChoosePixelFormat(w->hdc, &pfd);
SetPixelFormat(w->hdc, PixelFormat, &pfd);
int attrib[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
0
}; //OpenGL Context
HGLRC tmphrc = wglCreateContext(w->hdc);
wglMakeCurrent (w->hdc, tmphrc);
PFNWGLCREATEBUFFERREGIONARBPROC wglCreateContextAttribsARB = (PFNWGLCREATEBUFFERREGIONARBPROC)wglGetProcAddress( "wglCreateContextAttribsARB" );
w->hrc = (HGLRC)wglCreateContextAttribsARB( w->hdc, 0, (UINT)attrib ) ;
ShowWindow(w->hwnd, SW_SHOW);
UpdateWindow(w->hwnd);
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch(msg)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
case WM_CREATE:
{
}
break;
case WM_SIZE:
{
}
break;
case WM_PAINT:
{
}
break;
}
return DefWindowProc(hwnd, msg, wparam, lparam);
}
BOOL ProcessMessage(MSG *msg)
{
if(GetMessage(msg, NULL, 0, 0) != 0)
{
TranslateMessage(msg);
DispatchMessage(msg);
return TRUE;
}
else
{
return FALSE;
}
}
///////////////////////////////////////////////////////////////////////////////////////////
void DataUpload(Mesh *m, Vindex *indices, Vertex *vertices)
{
unsigned int vbo, index_vbo;
glGenVertexArrays(1, &m->vao);
glBindVertexArray(m->vao);
glGenBuffers(1, &index_vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_vbo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int)*3500, indices, GL_STATIC_DRAW);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// MessageBox(HWND_DESKTOP, "3..2..1..", "", MB_OK);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*3500, vertices, GL_STATIC_DRAW);
// MessageBox(HWND_DESKTOP, "YEA", "", MB_OK);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*3));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*6));
glBindVertexArray(0);
}
void MeshGenerate(Mesh *m, float x, float y, float z)
{
int i;
Vertex *vertices;
Vindex *indices;
m->vertexcount = 3500;
m->indexcount = 3500;
vertices = malloc(3500*sizeof(vertex));
indices = malloc(3500*sizeof(vindex));
for(i = 0; i<3500; i++)
{
vertices[i].x = 1.0f;
vertices[i].y = 1.0f;
vertices[i].z = 1.0f;
vertices[i].nx = 1.0f;
vertices[i].ny = 1.0f;
vertices[i].nz = 1.0f;
vertices[i].u = 1.0f;
vertices[i].v = 1.0f;
}
for(i = 0; i<3500; i++)
{
indices[i].first = 1;
indices[i].second = 1;
indices[i].third = 1;
}
DataUpload(m, vertices, indices);
return;
}
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd)
{
MSG msg;
BOOL isActive = 1;
window w;
WindowShenanigans(&w, &hinstance, WindowProc);
glewInit();
Mesh m;
MeshGenerate(&m, 1.0f, 1.0f, 1.0f);
while(isActive == 1)
{
SwapBuffers(w.hdc);
isActive = ProcessMessage(&msg);
}
return msg.wParam;
}
////////////////////////////////////////////////////////////////////////////////
最佳答案
ogl.c: In function `MeshGenerate':
ogl.c:200: 警告:从不兼容的指针类型传递 DataUpload' 的 arg 2
DataUpload'
ogl.c:200: 警告:从不兼容的指针类型传递 arg 3 of
我没有安装 glew,所以我无法让示例正常工作。但这绝对是一个问题。
DataUpload(m, vertices, indices);
应该是
DataUpload(m, indices, vertices);
关于c - 尺寸过大时 VBO + glBufferData 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9874966/
我正在查看 DOOM 源代码,我找到了 this行。 void * Z_Malloc (int size, int tag, void *user)
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我正从 Python 和 Numpy 转向 C++ 和 Eigen。 在 Python 中,我可以使用 .shape 属性获取 Numpy 数组/矩阵的形状(维度),如下所示: import nump
固定嵌入式YouTube视频的宽度并自己照顾自己的高度是否安全? 我有一个应用程序,用户可以将通知发布到公告板上。这些通知主要是文本(带有有限的html标签)和嵌入式图像。我现在要添加对嵌入式YouT
可以轻松创建一个 THREE.BoxGeometry,在创建宽度、高度和深度的三个独立参数时,您必须在其中传递参数。 我想创建任何和所有不带参数的THREE[types](),并在之后设置值。 有没有
我在 HTML 页面上有一个 Canvas : 属性width和height将 Canvas 拉伸(stretch)到某个字段,但不调整其大小。所以 var canvasElement = docu
我在我的 css 中使用 @media all 和 (max-width: 600px) {} 作为响应式菜单,问题是它没有正确显示。 我想让橙色填充绿色空间……当然,还要将绿色空间变成透明的。基本上
(我知道我问了很多关于这个的问题!) 基本上,我正在尝试将一些代码从 Matlab 转换为 C++,我遇到了这个: n = sum(size(blocks)) - len; 现在我计算了 vector
您好,我有一个用于创建产品的表单。用户应该能够选择类别(例如 T 恤),然后 T 恤的所有尺码(例如 S、M、L)都会下拉。用户可以输入每种尺寸的数量。 Javascript 对此不起作用。用户可以选
我正在尝试在页脚中定位和调整我的社交图标链接的大小,但是,这些命令似乎都没有效果,尤其是当我尝试调整它们的大小时。我试过将宽度和高度标记为“!重要”,但这也没有效果。 这是代码的 JSFiddle:h
我目前正在创建一个 HTML5 canvas基于绘图程序。用户可以绘制一张图像或几张图像“页面”,并将其保存到云端以供日后快速检索。这是用于交互式白板的;老师不能总是确定他们计划类(class)使用的
为网站存储图像的最佳方式是什么? 我不应该超过什么尺寸? 现在,我将所有界面文件保存在 png(主要是 Sprite )中,并将常用图像保存在 jpg 中。一些图像大约为 100-150Kb。 保存图
在 fancybox 主页 ( http://fancybox.net/home ) 中,有一个打开尺寸为屏幕 75% 的 iFrame 的示例。 我无法按照网站上的说明通过修改 .js 文件的宽度和
我想做一个仅适用于 iPhone 4 的应用程序,该应用程序使用 iAd AdBannerView。当我添加它时,它的固定大小为 320x50。在更高分辨率下这如何工作? 有人可以解释一下 iPhon
我们有一个 NSString,我们使用 - (NSSize)sizeWithAttributes:(NSDictionary *)attributes 来测量边界框。一切都好。 现在我们使用标准 NS
我想知道 Canvas 的宽度和高度,但我只知道它的 HDC。 我尝试过这段代码: procedure TForm92.Button1Click(Sender: TObject); var hBi
问题是如何使用数学从 START SVG 维度(不带旋转)和 END SVG 维度(带旋转)获取 >开始 SVG 信息。基本上,要从 START SVG 到 END SVG,我需要执行 -115.60
我的问题是,我有一个包含50万行的Oracle表。我设置了sqoop以将其作为 Parquet 文件导入到HDFS。我将--num-partition参数设置为32,得到了32个 Parquet 文件
是否可以更改 WordPress 中当前主题的 YouTube(或其他视频)的默认嵌入尺寸?我搜索了一个插件和一些代码,但似乎找不到。 我的意思是当您将 YouTube 网址粘贴到帖子或页面中时使用的
我有一个组,其中包含一个矩形和顶部的图像。我希望矩形可以调整大小,并且图像应该具有固定大小,除非矩形小于图像的情况。然后图像应该随着矩形缩小。 图像还应该始终居中并有一些填充。 除了图像的缩小尺寸部分
我是一名优秀的程序员,十分优秀!