HLSL错误及如何执行龙书中的代码

2024-02-06 05:38
文章标签 代码 错误 执行 hlsl 龙书

本文主要是介绍HLSL错误及如何执行龙书中的代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



error X3025: global variables are implicitly constant, enable compatibility mode to allow modification 
全局变量是extern也是常量,在shader里面不能修改,但可以从宿主程序里改。
以前的编译器没有强制这一点,现在新的强化了这一要求。

把extern 改成static运行成功

或者将D3DXCompileShaderFromFile的第六个参数改为D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY即可 




龙书: DX9游戏开发编程基础

龙书中的代码没有工程,只有.h.cpp文件
所以需要我们自己建工程


1.创建一个win32项目,如果一开始不小心创建为控制台,则可以在项目属性的链接器,系统,子系统中修改为windows

许多新手在编程时经常遇到“无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”这样的错误,最近看了一些这方面的书籍,现将解决方案大概叙述一下:连接程序在负责连接可执行程序时,选择相应的c/c++运行时启动函数。如果设定了/subsystem:windows连接程序开关,那么连接程序会试图寻找WinMain或wWinMain函数。如果连个函数都不存在,那么就会返回一个“一个未解决的外部符号”(无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用)同样,如果设定了/subsystem:console连接程序开关,那么连接程序就会试图寻找main函数或者wmain函数,如果找不到这连个函数是,连接程序返回unresolved externel symbol错误信息。变成新手容易犯的一个错误是,创建应用程序时选择了错误的应用程序类型。例如,开发人员创建了一个新的Win32应用程序项目,并给这个项目创建了一个入口函数main。在这种情况下,创建应用程序时,开发人员就会看到一个连接程序的错误信息。这是因为Win32应用程序项目设置了/subsystem:windows连接程序开关,但是却找不到相应的Winmain或者wWinmain函数。这是侯你可以有以下几种解决方案。1 将main函数改为Winmain函数2 将/subsystem:windows开关改为/subsytem:console3全部删除/subsytem:windows开关,让连接程序根据源代码中实现的函数进行正确的操作。更改/subsystem:windows的方法:右键点击项目,选择属性,会看到如下的选项框,点击连接器->系统,在右侧会看到“子系统”选项,在这里可以选择相应的连接程序开关 

2.将所有的文件都copy到工程的文件目录下,并添加.h.cpp和其他资源


3.删除原有工程的含有main的文件(如果建立的是空项目,就不用删除了),如,test.cpp这样程序就会找到源代码中的mian入口了。然后忽略预编译头

4.设置dx库,头文件,dll的路径


5.链接库


或者
#pragma comment(lib,"dxguid.lib") 
#pragma comment(lib,"d3d9.lib") 
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"winmm.lib")

6.编码


选择多字节字符集

7.制作一个模板,以后就用它来添加代码了

8.当然,还没有完,需要到shader部分,由于编译器的版本的更新,还会出现如下的问题。
error X3025: global variables are implicitly constant, enable compatibility mode to allow

vector LightDirection;
LightDirection.w = 0.0f;

这就是报错的代码了,
全局变量是extern也是常量,在shader里面不能修改,但可以从宿主程序里改。
以前的编译器没有强制这一点,现在新的强化了这一要求。
将D3DXCompileShaderFromFile的第六个参数改为D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY即可 

      hr = D3DXCompileShaderFromFile(
           "diffuse.txt",
          0,
          0,
           "Main", // entry point function name
           "vs_1_1",
           //D3DXSHADER_DEBUG,
           D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY,
          & shader,
          & errorBuffer,
          & DiffuseConstTable);
9.龙书的shader的后缀名都是.txt,在vs2008中是没有高亮的,作为一个苛刻的程序员,必须要进行设计。
在工具->选项->文本编辑器->文件扩展名,中加上.txt,编辑器使用vc++,这样就能高亮了。

这篇关于HLSL错误及如何执行龙书中的代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683287

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示