- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我已经使用我自己的 glwrapper 成功地连接了所有 OpenGL 函数。我遇到的问题是关于 Intel/Nvidia 与 ATI 的对比。我 Hook 模型并为每个模型生成 ID,以便我可以知道正在渲染什么。
以下是我目前掌握的信息+区别:
glPushMatrix()
glMultMatrixf({0.70710671, 0, 0.70710683, 0}
{0, 1, 0, 0}
{-0.70710683, 0, 0.70710671, 0}
{26368, -1125, 28416, 1})
glBindBufferARB(GL_ARRAY_BUFFER, 56)
glBufferSubDataARB(GL_ARRAY_BUFFER, 0, 11544, 0x0B2DF6EC)
glGenBuffersARB(1, 0x0AE6231C)
glBindBufferARB(GL_ARRAY_BUFFER, 65)
glBufferDataARB(GL_ARRAY_BUFFER, 11544, 0x0B2DF6EC, GL_STATIC_DRAW)
glGenBuffersARB(1, 0x0AE6231C)
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, 66)
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, 7020, 0x0B2DF6EC, GL_STATIC_DRAW)
//以上都是两 block 显卡完成的。以下是问题所在。
glBindBufferARB(GL_ARRAY_BUFFER, 56) //Intel/Nvidia makes this NULL.
glVertexPointer(3, GL_FLOAT, 12, 0x00000000) //Intel/NVidia makes this Not 0x00000.
glEnableClientState(GL_VERTEX_ARRAY)
glDisableClientState(GL_NORMAL_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER, 65)
glColorPointer(4, GL_UNSIGNED_BYTE, 12, 0x00000000)
glEnableClientState(GL_COLOR_ARRAY)
glTexCoordPointer(2, GL_FLOAT, 12, 0x00000004)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
glDrawElements(GL_TRIANGLES, 3510, GL_UNSIGNED_SHORT, 0x00000000)
我想知道为什么要对 Nvidia && Intel 卡的绑定(bind)缓冲区调用进行 NULL 处理而不将顶点指针清零,而在 ATI 上,一切都如上。
有什么区别?另外我的第二个问题是,如果我存储指向顶点的指针和索引(保证它们不会被删除),我怎样才能得到每个顶点?
例子:
VBO CurrentBuffer;
std::vector<VBO> Buffers;
Hook_glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
{
CurrentBuffer.target = target;
CurrentBuffer.size = size;
CurrentBuffer.usage = usage; //To figure out if it's indices array or vertex array.
CurrentBuffer.data = data; //Let us assume that this pointer is never deleted.
(*original_BufferDataArb)(target, size, data, usage);
}
Hook_glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
{
CurrentBuffer.VNull = (pointer == NULL) ? true : false;
CurrentBuffer.VPointer = pointer; //This can be both null or not null.
CurrentBuffer.VSize = size;
CurrentBuffer.Vtype = type;
CurrentBuffer.Stride = stride;
Buffers.push_back(CurrentBuffer);
(*original_VPointer)(size, type, stride, pointer);
}
void Hook_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
{
if (mode == GL_TRIANGLES)
{
const GLfloat* Pointer = static_cast<const GLfloat*>(Buffers.back().VPointer); //Assuming it isn't NULL.
for (int I = 0; I < count / 3; ++I) //For each triangle.
{
int X = *(reinterpret_cast<const GLfloat*>(reinterpret_cast<const char*>(Pointer)));
int Y = *(reinterpret_cast<const GLfloat*>(reinterpret_cast<const char*>(Pointer) + (Buffers.back().Stride)) + 1);
int Z = *(reinterpret_cast<const GLfloat*>(reinterpret_cast<const char*>(Pointer) + (2 * Buffers.back().Stride)) + 2);
}
}
(*original_DrawElements)(mode, count, type, indices);
}
我是否正确地迭代了指针?另外,如果 vertexpointer 为 null,有没有办法可以使用 bufferdata 用法来获取每个顶点?我读到我能做到:
if (CurrentBuffer.VNull)
{
GLfloat* IndexPointer = Buffers[Buffers.size()].data; //Index pointer is GL_Element_Array_Buffer
GLfloat* VertexPointer = Buffers[Buffers.size() - 1].data; //Vertex pointer is GL_Array_Buffer
for (int I = 0; I < TriangleCount; ++I)
{
int X = *VertexPointer[IndexPointer[I]];
int Y = *VertexPointer[IndexPointer[I]] + 1;
int Z = *VertexPointer[IndexPointer[I]] + 2;
}
}
最佳答案
glBindBufferARB(GL_ARRAY_BUFFER, 56) //Intel/Nvidia makes this NULL.
glVertexPointer(3, GL_FLOAT, 12, 0x00000000) //Intel/NVidia makes this Not 0x00000.
您确定吗,在您的 Intel/NVidia 案例中,程序没有主动设置这些值。空值作为 glVertexPointer 的数据参数只有在绑定(bind)了缓冲区对象时才有意义。但是,如果没有绑定(bind)缓冲区对象,例如通过使用 ID 为 0 的 glBindBuffer 调用解除绑定(bind),则 glVertexPointer 的数据参数必须是非空指针。
关于c++ - Hook OpenGL 帮助(4 - 5 个问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094610/
我创建了一个简单的钩子(Hook),我安装了它 SetWindowsHookEx(WH_CBT, addr, dll, 0); 完成后,我卸载 UnhookWindowsHookEx(0); 然后我可
我正在使用 React Hooks,当我用 mobx 的观察者包装我的组件时,我收到了这个错误。可能是什么问题?是否可以将 mobx 与 React Hooks 一起使用? import classn
我知道这个问题已经被回答过很多次了。我只是找不到解决我的问题的答案,让我相信,我要么是愚蠢的,要么是我的问题没有被解决,因为它比我更愚蠢。除此之外,这是我的问题: 我正在尝试创建一个功能组件,它从 r
我正在使用 React Navigation 的 useNavigation 钩子(Hook): 在 MyComponent.js 中: import { useNavigation } from "
我想在 gitlab 中使用预提交钩子(Hook)。我做的一切都像文档中一样:https://docs.gitlab.com/ce/administration/custom_hooks.html 在
我最近在和一些人谈论我正在编写的程序时听到了“hook”这个词。尽管我从对话中推断出钩子(Hook)是一种函数,但我不确定这个术语到底意味着什么。我搜索了定义,但找不到好的答案。有人可以让我了解这个术
我正在寻找一个在页面创建或页面更改后调用的钩子(Hook),例如“在导航中隐藏页面”、“停用页面”或“移动/删除页面“ 有人知道吗? 谢谢! 最佳答案 这些 Hook 位于 t3lib/class.t
我正在使用钩子(Hook)将新方法添加到 CalEventLocalServiceImpl 中... 我的代码是.. public class MyCalendarLocalServiceImpl e
编译器将所有 SCSS 文件编译为 STANDALONE(无 Rails)项目中的 CSS 后,我需要一个 Compass Hook 。 除了编辑“compiler.rb”(这不是好的解决方案,因为
我“.get”一个请求并像这样处理响应: resp = requests.get('url') resp = resp.text .. # do stuff with resp 阅读包的文档后,我看到
我们想在外部数据库中存储一些关于提交的元信息。在克隆或 checkout 期间,应引用此数据库,我们将元信息复制到克隆的存储库中的文件中。需要数据库而不是仅仅使用文件是为了索引和搜索等...... 我
我有一个 react 钩子(Hook)useDbReadTable,用于从接受tablename和query初始数据的数据库读取数据。它返回一个对象,除了数据库中的数据之外,还包含 isLoading
在下面的代码中,当我调用 _toggleSearch 时,我同时更新 2 个钩子(Hook)。 toggleSearchIsVisible 是一个简单的 bool 值,但是,setActiveFilt
问题 我想在可由用户添加的表单中实现输入字段的键/值对。 参见 animated gif on dynamic fields . 此外,我想在用户提交表单并再次显示页面时显示保存的数据。 参见 ani
当状态处于 Hook 状态时,它可能会变得陈旧并泄漏内存: function App() { const [greeting, setGreeting] = useState("hello");
const shouldHide = useHideOnScroll(); return shouldHide ? null : something useHideOnScroll 行为应该返回更新后
我正在使用 React-native,在其中,我有一个名为 useUser 的自定义 Hook,它使用 Auth.getUserInfro 方法从 AWS Amplify 获取用户信息,并且然后获取返
我正在添加一个 gitolite 更新 Hook 作为 VREF,并且想知道是否有办法将它应用于除 gitolite-admin 之外的所有存储库。 有一个更简单的方法而不是列出我想要应用 Hook
如何使用带有 react-apollo-hooks 的 2 个 graphql 查询,其中第二个查询取决于从第一个查询中检索到的参数? 我尝试使用如下所示的 2 个查询: const [o, setO
我是 hooks 的新手,到目前为止印象还不错,但是,如果我尝试在函数内部使用 hooks,它似乎会提示(无效的 hook 调用。Hooks can only be called inside o
我是一名优秀的程序员,十分优秀!