较旧游戏的着色器未被较新的英特尔图形芯片识别

独裁者

这听起来像是一个奇怪的问题,但这是故事:

有一个小而固执的社区,仍然玩着较旧的2005-6游戏(帝国时代III +扩展版)。有些人在Windows上玩,有些人在OS X上玩(游戏也移植到OS X上)。

问题是,当游戏在OS X上启动时,每个人都可以在中高级着色器设置上玩,这时似乎可以正确识别图形卡。但是,一旦较新的型号安装了Intel图形芯片(Intel HD 4000,Iris等),中型和更高级别的着色器设置就会停止工作。

现在,同一游戏可以在Windows上正确显示中高着色器,但在同一台计算机上的OS X中却不能这样做(使用双引导)。因此,这不是硬件问题。同一图形芯片可以在Windows(在DirectX环境中)上显示高着色器,但在OS X(在OpenGL环境中)上不能显示高着色器。

首先,我认为这是因为移植此游戏的公司(Macsoft)并未将着色器编程用于OpenGL,但显然可以。由于高级着色器曾经在OS X中工作过,因此这意味着他们的OpenGL适配可以在不同的硬件上正常工作。因此,似乎游戏开发商如何编写配置文件以识别硬件设备,以某种方式不能将较新的英特尔图形芯片识别为具有DirectX 8/9 Shader模型v 2.0功能以及将默认设置呈现为基本DirectX 7功能存在问题没有任何着色器。

我对游戏文件进行了一些研究,以试图找出使游戏能够识别图形芯片的文件,然后从该文件夹中找到了devices.xml(我将所有着色器文件都上传到googledrive中,以防万一。任何人都想看一下):

/ Config /文件夹

我发现游戏会忽略devices.xml文件中的所有内容,并跳转到着色器设置最低的最后一个通用设备:

    <device name="GenericFF">
        generic dx7
        <low>Generic DX7</low>
    </device>

如果我用通用DX8设置替换了此设备,游戏将开始显示更多的着色器,但是水渲染会出现一些奇怪的颜色范围,从绿色到紫色。

该通用DX7配置文件也被编码在一个名为通用DX7.d3dconfig的单独文件中,您可以在前面提到的相同的/ Config /文件夹中找到该文件。在此文件中,您可以找到许多设置,例如:

<d3dconfig>
    <fixedfunctionverts>true</fixedfunctionverts>
    <techniques>
        <enable>alpha transparency</enable>
        <enable>alphatest</enable>
        <enable>alphatest_flatcolor</enable>
        <enable>alphatest_blendcolor</enable>

这些着色器功能均具有自己的设置文件,例如alphatest(在/ techniques /文件夹中):

<technique>
    <pass>
        <texture stage="0">diffuse</texture>
        <rs>alphatest</rs>
        <tss>default</tss>
    </pass>
</technique>

而且,当然,最终所有这些以与XML类似的格式编码的配置文件都指向着色器编程文件,例如/ Render / ps /文件夹中的default_shader.psh:

ps.1.1

def c7, 1, 0, 0, 0


tex t0   //base texture
#ifdef ENVMAP
tex t2   //envmap texture
#endif

mul_x2 r0.rgb, t0, v0       // texture * light
+mul r0.a, t0, v0       // texture * light

#ifdef ENVMAP
// reflectivity is a float value in the r component so the dp3 is a
// clunky way to propogate this value into all components before the lerp
dp3 r1, c6, c7
lrp r0, r1, t2, r0
#endif

#ifdef TREE
add r0, r0, c1
#endif

#ifdef TINT
add r0, r0, c0
#endif

问题是:是否可以使这个旧游戏(使用较旧的着色器编程,最多支持Shader model 2.0)识别较新的Intel图形芯片,或者这是OS X上的游戏如何移植到OpenGL的问题?环境?

更新:

还有另一个似乎未被游戏使用的文件夹,其中一个与我上面提到的名称相同的文件具有以下代码:

// default_shader.psh

#ifdef TREE
uniform vec4 pc1;
#endif
#ifdef TINT
uniform vec4 pc0;
#endif

uniform sampler2D tx0;

void main()
{
    vec4 diffuse = vec4( texture2D(tx0, gl_TexCoord[0].st) ) * gl_Color;
    diffuse.xyz *= 2.0;

#ifdef TREE
    diffuse += pc1;
#endif

#ifdef TINT
    diffuse += pc0;
#endif

    gl_FragColor = diffuse;
} 

/*
ps.1.1

def c7, 1, 0, 0, 0


tex t0   //base texture
#ifdef ENVMAP
tex t2   //envmap texture
#endif

mul_x2 r0.rgb, t0, v0       // texture * light
+mul r0.a, t0, v0       // texture * light

#ifdef ENVMAP
// reflectivity is a float value in the r component so the dp3 is a
// clunky way to propogate this value into all components before the lerp
dp3 r1, c6, c7
lrp r0, r1, t2, r0
#endif

#ifdef TREE
add r0, r0, c1
#endif

#ifdef TINT
add r0, r0, c0
#endif
*/
独裁者

我的结论是,这很可能是不可能的,因为OpenGL移植的很大一部分涉及针对每个专有设备的单独的着色器编程。

例如,在/ shaders /文件夹中,每个主要制造商都有单独的用于地形阴影渲染的文件,这些文件为运行OS X(ATI和nVidia)的计算机提供了图形卡:地形阴影only_ati.vsh和地形阴影only_nv.psh。这些具有用于渲染同一事物的不同方法:

// terrain shadow only_ati.vsh

uniform mat4 vc0;   // worldViewProj
uniform mat4 vc4;
uniform mat4 vc8;
uniform vec4 vc12;

void main()
{
    // transform position
    gl_Position = gl_Vertex * vc0;

    // Set to constant color
    gl_FrontColor = vec4(0.0);

    // transform
    gl_TexCoord[0] = gl_Vertex * vc4;

    // Depth in light space
    vec4 r1 = gl_Vertex * vc8;
    gl_TexCoord[1].s = r1.z * vc12.x;
}

// terrain shadow only_nv.vsh

uniform mat4 vc0;   // worldViewProj
uniform mat4 vc4;
uniform vec4 vc15;  // texture filtering offsets
uniform vec4 vc16;
uniform vec4 vc17;

void main()
{
    // transform position
    gl_Position = gl_Vertex * vc0;

    // Set to constant color
    gl_FrontColor = vec4(0.0, 0.0, 0.0, 0.0);

    // transform
    vec4 r0 = gl_Vertex * vc4;
    r0.y = 1.0 - r0.y;      // Invert y (reading from a GL buffer)

    //-- compute PCF Filter texture offsets
    gl_TexCoord[0] = r0 + vc15;
    gl_TexCoord[2] = r0 + vc16;
    gl_TexCoord[3] = r0 + vc17;
}

由于没有针对英特尔芯片的OpenGL移植,这意味着该游戏的OpenGL部分可能不支持中等和更高阴影的支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“英特尔图形”如何在微处理器和芯片组之间划分?

来自分类Dev

为什么我的#version 330着色器在较旧的opengl上运行?

来自分类Dev

较新的AP和较旧的PoE注入器

来自分类Dev

带有集成英特尔图形芯片的Linux上的OpenCL

来自分类Dev

英特尔Haxm正在运行,但未被Android Studio识别

来自分类Dev

英特尔®驱动程序和支持助手总是说有可用的较新版本

来自分类Dev

关于英特尔Haswell HD图形

来自分类Dev

英特尔芯片组-GPIO编程

来自分类Dev

英特尔图形安装程序2.0.2在新的ubuntu 16.04上失败

来自分类Dev

较新的实现与较旧的实现之间的区别

来自分类Dev

较旧的异步消息会覆盖较新的异步消息

来自分类Dev

删除较新的linux内核并保留较旧的linux内核

来自分类Dev

较新的实现和较旧的实现之间的区别

来自分类Dev

使用较旧的“ Web参考”引用较新的WCF项目

来自分类Dev

英特尔高清图形是否将使仅RDP服务器受益?

来自分类Dev

谷歌浏览器与集成的英特尔图形撕裂,但与optirun合作

来自分类Dev

英特尔处理器家族

来自分类Dev

英特尔检查器检查dll

来自分类Dev

英特尔寄存器命名

来自分类Dev

如何使用cmd将数据从较新的MS SQL服务器传输到较旧的MS SQL Server?

来自分类Dev

C ++使用较新的编译器的功能来生成供较旧的编译器使用的代码

来自分类Dev

在较旧的linux(rhel5)上运行较新的Web浏览器(firefox,chrome等)的最佳方法是什么?

来自分类Dev

如何升级英特尔图形驱动程序?

来自分类Dev

如何升级英特尔图形软件包?

来自分类Dev

英特尔图形安装程序与股票驱动程序

来自分类Dev

英特尔Linux图形驱动程序

来自分类Dev

英特尔Linux图形驱动程序

来自分类Dev

如何升级英特尔图形软件包?

来自分类Dev

英特尔图形安装程序与股票驱动程序

Related 相关文章

  1. 1

    “英特尔图形”如何在微处理器和芯片组之间划分?

  2. 2

    为什么我的#version 330着色器在较旧的opengl上运行?

  3. 3

    较新的AP和较旧的PoE注入器

  4. 4

    带有集成英特尔图形芯片的Linux上的OpenCL

  5. 5

    英特尔Haxm正在运行,但未被Android Studio识别

  6. 6

    英特尔®驱动程序和支持助手总是说有可用的较新版本

  7. 7

    关于英特尔Haswell HD图形

  8. 8

    英特尔芯片组-GPIO编程

  9. 9

    英特尔图形安装程序2.0.2在新的ubuntu 16.04上失败

  10. 10

    较新的实现与较旧的实现之间的区别

  11. 11

    较旧的异步消息会覆盖较新的异步消息

  12. 12

    删除较新的linux内核并保留较旧的linux内核

  13. 13

    较新的实现和较旧的实现之间的区别

  14. 14

    使用较旧的“ Web参考”引用较新的WCF项目

  15. 15

    英特尔高清图形是否将使仅RDP服务器受益?

  16. 16

    谷歌浏览器与集成的英特尔图形撕裂,但与optirun合作

  17. 17

    英特尔处理器家族

  18. 18

    英特尔检查器检查dll

  19. 19

    英特尔寄存器命名

  20. 20

    如何使用cmd将数据从较新的MS SQL服务器传输到较旧的MS SQL Server?

  21. 21

    C ++使用较新的编译器的功能来生成供较旧的编译器使用的代码

  22. 22

    在较旧的linux(rhel5)上运行较新的Web浏览器(firefox,chrome等)的最佳方法是什么?

  23. 23

    如何升级英特尔图形驱动程序?

  24. 24

    如何升级英特尔图形软件包?

  25. 25

    英特尔图形安装程序与股票驱动程序

  26. 26

    英特尔Linux图形驱动程序

  27. 27

    英特尔Linux图形驱动程序

  28. 28

    如何升级英特尔图形软件包?

  29. 29

    英特尔图形安装程序与股票驱动程序

热门标签

归档