DirectX 11 镶嵌着色器不工作

如何解决DirectX 11 镶嵌着色器不工作

我的镶嵌着色器有问题。它在我不使用 Hull ShaderDomain Shader 时呈现。只是普通的顶点和像素着色器工作正常。这是我的 VS 和 PS 着色器:

VOut VShader(float4 position : POSITION,float4 color : COLOR) 
{
VOut output;
output.position = mul(world,position);
output.color = color;
return output;  
}
float4 PShader(float4 position : SV_POSITION,float4 color : COLOR) : SV_TARGET
{
return color;
}

我正在使用正交投影将像素映射到它们的原始位置。这是有问题的着色器。其中输入 float3 个顶点和 float4 个颜色。

cbuffer cbPerFrame : register(b0) {
    matrix world; };

struct VS_CONTROL_POINT_INPUT {
    float3 vPosition        : POSITION; };

struct VS_CONTROL_POINT_OUTPUT {
    float3 vPosition        : POSITION; };

struct HS_CONSTANT_DATA_OUTPUT {
    float Edges[3]          : SV_TessFactor;
    float Inside            : SV_InsideTessFactor; };

struct HS_OUTPUT {
    float3 vPosition           : POSITION; };

HS_CONSTANT_DATA_OUTPUT ConstantHS(InputPatch<VS_CONTROL_POINT_OUTPUT,3> ip,uint PatchID : SV_PrimitiveID) {
    HS_CONSTANT_DATA_OUTPUT Output;
    Output.Edges[0] = Output.Edges[1] = Output.Edges[2] = 4;
    Output.Inside = 4;
    return Output; }

   [domain("tri")]
   [partitioning("integer")]
   [outputtopology("triangle_cw")]
   [outputcontrolpoints(3)]
   [patchconstantfunc("ConstantHS")]

HS_OUTPUT HShader(InputPatch<VS_CONTROL_POINT_OUTPUT,3> p,uint i : SV_OutputControlPointID,uint PatchID : SV_PrimitiveID)

 {
        HS_OUTPUT Output;
        Output.vPosition = p[i].vPosition;
        return Output;
 }

struct DS_OUTPUT {
    float4 vPosition        : SV_POSITION; };

[domain("tri")]
 DS_OUTPUT DShader(HS_CONSTANT_DATA_OUTPUT input,float3 UVW : SV_DomainLocation,const OutputPatch<HS_OUTPUT,3> quad) {
        DS_OUTPUT Output;
        float3 finalPos = UVW.x * quad[0].vPosition + UVW.y * quad[1].vPosition + UVW.z * quad[2].vPosition;
        Output.vPosition = mul(world,float4(finalPos,1));
        return Output; }

VS_CONTROL_POINT_OUTPUT VShader(VS_CONTROL_POINT_INPUT Input) {
    VS_CONTROL_POINT_OUTPUT Output;
    Output.vPosition = Input.vPosition;
    return Output; }

float4 PShader(DS_OUTPUT Input) : SV_TARGET {
    return float4(1,1); }

我的着色器初始化。代码:

D3DCompileFromFile(L"shader.hlsl",NULL,"VShader","vs_5_0",&VS,&ERR);
D3DCompileFromFile(L"shader.hlsl","PShader","ps_5_0",&PS,&ERR); 
D3DCompileFromFile(L"shader.hlsl","HShader","hs_5_0",&HS,"DShader","ds_5_0",&DS,&ERR);

dev->CreateVertexShader(VS->GetBufferPointer(),VS->GetBufferSize(),&pVS);
dev->CreatePixelShader(PS->GetBufferPointer(),PS->GetBufferSize(),&pPS);
dev->CreateHullShader(HS->GetBufferPointer(),HS->GetBufferSize(),&pHS);
dev->CreateDomainShader(DS->GetBufferPointer(),DS->GetBufferSize(),&pDS);

devcon->VSSetShader(pVS,0);
devcon->HSSetShader(pHS,0);
devcon->DSSetShader(pDS,0);
devcon->PSSetShader(pPS,0);

输入描述符:

D3D11_INPUT_ELEMENT_DESC ied[] =
{
    {"POSITION",DXGI_FORMAT_R32G32B32_FLOAT,D3D11_INPUT_PER_VERTEX_DATA,0},{"COLOR",DXGI_FORMAT_R32G32B32A32_FLOAT,12,};

dev->CreateInputLayout(ied,2,VS->GetBufferPointer(),&pLayout);
devcon->IASetInputLayout(pLayout);

光栅化器:

D3D11_RASTERIZER_DESC RasterDesc = {};
RasterDesc.FillMode = D3D11_FILL_SOLID;
RasterDesc.CullMode = D3D11_CULL_NONE;
RasterDesc.DepthClipEnable = TRUE;
ID3D11RasterizerState* WireFrame=NULL;

dev->CreateRasterizerState(&RasterDesc,&WireFrame);
devcon->RSSetState(WireFrame);

输入顶点:

OurVertices = (VERTEX*)malloc(PointCount * sizeof(VERTEX));
for (int i = 0; i < PointCount; i++)
{
    OurVertices[i] = { RandOm() * i,RandOm() * i,RandOm(),{abs(RandOm()),abs(RandOm()),1.0f} };
}

CBuffer:

ID3D11Buffer* g_pConstantBuffer11 = NULL;
cbuff.world = XMMatrixOrthographicOffCenterLH(SceneY - (ViewPortWidth / 2) * SceneZoom,SceneY + (ViewPortWidth / 2) * SceneZoom,SceneX - (ViewPortHeight / 2) * SceneZoom,SceneX + (ViewPortHeight / 2) * SceneZoom,-10000.0f,10000.0f);

D3D11_BUFFER_DESC cbDesc;
cbDesc.ByteWidth = sizeof(CBUFFER);
cbDesc.Usage = D3D11_USAGE_DYNAMIC;
cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
cbDesc.MiscFlags = 0;
cbDesc.StructureByteStride = 0;
   
D3D11_SUBRESOURCE_DATA InitData;
InitData.pSysMem = &cbuff;
InitData.SysMemPitch = 0;
InitData.SysMemSlicePitch = 0;

dev->CreateBuffer(&cbDesc,&InitData,&g_pConstantBuffer11);

devcon->VSSetConstantBuffers(0,1,&g_pConstantBuffer11);

渲染时:

devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST); 

所有可能的异常都在此代码中处理。只是为了干净的代码,它们被删除。并且在 InitRender 阶段没有警告或异常。 我什至无法调试它,因为没有任何东西被吸引到输出中。另外,有什么方法可以查看着色器的输出值吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res