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调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.