小编Jos*_*Pla的帖子

图形API上的包装器

我非常喜欢拥有一个能够适应能力的游戏引擎,不仅仅是它能做什么,还有它如何处理新代码.最近,对于我的图形子系统,我编写了一个class覆盖的方法,其工作原理如下:

class LowLevelGraphicsInterface {
    virtual bool setRenderTarget(const RenderTarget* renderTarget) = 0;
    virtual bool setStreamSource(const VertexBuffer* vertexBuffer) = 0;
    virtual bool setShader(const Shader* shader) = 0;
    virtual bool draw(void) = 0;

    //etc. 
};
Run Code Online (Sandbox Code Playgroud)

我的想法是创建一个在大多数图形API中通用的函数列表.那么对于DirectX11,我只想创建一个新的孩子class:

class LGI_DX11 : public LowLevelGraphicsInterface {
    virtual bool setRenderTarget(const RenderTarget* renderTarget);
    virtual bool setStreamSource(const VertexBuffer* vertexBuffer);
    virtual bool setShader(const Shader* shader);
    virtual bool draw(void);

    //etc. 
};
Run Code Online (Sandbox Code Playgroud)

然后,这些功能中的每一个都将DX11直接连接.我确实意识到这里有一层间接.人们是否被这个事实所关闭?

这是一种广泛使用的方法吗?还有什么我可以/应该做的吗?可以选择使用预处理器,但这对我来说似乎很麻烦.有人还向我提到了模板.你们有什么感想?

c++ opengl directx graphics

6
推荐指数
1
解决办法
1174
查看次数

C++链接错误与命名空间和包含文件

我正在研究我的引擎的核心,我在Microsoft Visual c ++ express中遇到了严重的链接问题.

为了简化问题,导致问题的是这两个头文件,每个头文件都有一个具有不同标识符的命名空间.这两个文件实际上包含了彼此.编译时没有错误,但是在链接时,错误显示"X已在A.obj中定义".下面提供了一个示例:

HEADER 1

#ifndef HEADER1_H
#define HEADER1_H

#include "header2.h"
namespace Core{
    int x, y, z;
}
#endif
Run Code Online (Sandbox Code Playgroud)

HEADER 2

#ifndef HEADER2_H
#define HEADER2_H

#include "header1.h"
namespace GUI{
    int x, y, z;
}
#endif
Run Code Online (Sandbox Code Playgroud)

最终发生的是我得到一个错误,指出x,y和z变量已经在创建的第一个.obj文件中定义.我假设因为变量来自不同的命名空间,所以它们不会发生碰撞.我也有标题保护,因此头文件似乎不会被多次包含.

无论如何,任何形式的帮助或建议将不胜感激.我被困在这3天左右:P.另外,如果我没有提供足够的信息,请告诉我,这只是我目前的代码非常长.

干杯,乔伊

c++ c++11

1
推荐指数
1
解决办法
2326
查看次数

标签 统计

c++ ×2

c++11 ×1

directx ×1

graphics ×1

opengl ×1