- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个没有定义任何技术的 .fx 文件。在我的代码中,加载我使用的顶点和像素着色器
ID3DBlob* pVSBlob = NULL;
ID3DBlob* pErrorBlob;
hr = D3DX11CompileFromFile( "shader.fx", NULL, NULL, "VS", "vs_4_0",
dwShaderFlags, 0, NULL, &pVSBlob, &pErrorBlob, NULL );
然后制作着色器
hr = g_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader );
这很好用,到了渲染的时候,我就用
g_pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
g_pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
设置着色器。我想将 .fx 文件编译成 .fxo 文件,但我看到加载 .fxo 文件的唯一方法是使用 D3DX11CreateEffectFromMemory。但是,我宁愿不使用 Effect 接口(interface),而且我的 .fx 文件中也没有任何技术。除了从 .fxo 文件而不是 .fx 文件外,是否有任何方法可以像我上面那样加载着色器?
最佳答案
由于已编译的着色器只是准备上传的大量二进制数据,因此任何文件加载 API 都可以。
HANDLE hFile = CreateFile(shaderFileName, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
if (hFile == INVALID_HANDLE_VALUE)
{
//Error opening file, handle here (GetLastError can return why this failed).
}
else
{
int fileSize = GetFileSize(hFile,NULL);
byte* data = (byte*)malloc(fileSize);
//You can also check if data is NULL, hence malloc failed
DWORD numRead = 0;
if (ReadFile(hFile, data, fileSize, &numRead , NULL ))
{
hr = g_pd3dDevice->CreateVertexShader(data,fileSize,NULL,&g_pVertexShader);
}
else
{
//Read failed, handle error as you wish
}
CloseHandle(hFile);
free(data);
}
关于c++ - 如何从 .fxo 文件创建 ID3D11VertexShader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24212048/
是否可以对要使用计算着色器渲染的几何数据应用过滤器,然后将结果用作顶点着色器中的输入缓冲区?这将节省我读回数据的麻烦(和时间)。 非常感谢任何帮助。 最佳答案 是的,绝对是的。首先,使用 BIND_V
为什么第一个代码有效,但第二个代码无效?代码在顶点着色器中。 第一个代码: gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * ve
仅当高度为零时,如何为网格设置颜色? 至于现在,我只是混合了颜色: 问题是这种混合并不精确。我只在高度为零时才想要蓝色(所以只在我用油漆制作的红色路径内)。 我为网格创建了一个自定义 Material
我发现它们之间明显不匹配,但我不明白为什么或如何它们不匹配。我已经看了这么久了,现在什么也看不见了,所以也许多看几双眼睛...... Here are the members of the verte
我尝试编译一些像素着色器示例。但是它们都给出相同的错误信息。 “不能将着色器模型 3.0 与早期着色器模型混合使用。如果顶点着色器或像素着色器编译为 3.0,则它们必须都是。” 问题似乎是像素着色器使
我正在尝试渲染图像并使用 glTranslate 对其进行偏移: glPushMatrix(); glTranslatef(x, y, 0.0f); glDrawElements(GL_TRIANGL
我目前正在 Qt 中基于 QOpenGLWidget 开发 OpenGL-Widget。我遵循了一些示例并使用 GLSL-Wrapper 进行演示。出于兼容性目的,应用程序本身应尽可能独立,例如更改
我正在学习 OpenGL 教程 here .它在我的 Arch Linux 系统上运行良好,但在 Windows 上运行不佳。 我的顶点和片段着色器代码与示例中的完全一样: 片段着色器代码: #ver
我是一名优秀的程序员,十分优秀!