Direct3D类的接口
Interface for Direct3D class
编辑:
我看了一些教程,但我很难理解C++中接口的正确使用。
System::Initialize负责初始化图形。iGraphics是我们初始化DX9或DX11的接口(基于最终用户规格(D3D包含使用DX的功能。
我试图通过纯虚拟函数调用D3D,这样就可以在运行时决定我们是使用DX9、DX11还是OpenGL。
接口.h:
#ifndef _INTERFACES_H_
#define _INTERFACES_H_
#pragma once
class iGraphics
{
public:
virtual ~iGraphics() {};
virtual bool vGetGraphics(HWND) = 0;
virtual void vShutdown() = 0;
virtual void vRender(float, float, float, float) = 0;
};
#endif
(部分(D3D.h
class D3D : public iGraphics
{
virtual void vShutdown() override;
virtual void vRender(float, float, float, float) override;
};
class D3D11 : Public D3D
{
public:
virtual bool vGetGraphics(HWND) override;
private:
bool CreatePipeline();
bool InitGraphics();
bool PrepareD3D(HWND);
};
问题:我已经更正了大多数其他项目,现在我收到了错误:
error C2011: 'D3D11' : 'class' type redefinition
我所有的标题都以ifndef开头,还有什么原因导致了这种情况?
感谢@NicoSchertler指出了大多数需要更正的错误。
我在这个代码上有很多问题,所以很难总结我必须修复的所有问题,但这是最后一个代码:
接口.h
#ifndef _INTERFACES_H_
#define _INTERFACES_H_
#pragma once
class iGraphics
{
public:
virtual ~iGraphics() {};
virtual bool vGetGraphics(HWND) = 0;
virtual void vShutdown() = 0;
virtual void vRender(float, float, float, float) = 0;
};
#endif
D3D.h
class D3D : public iGraphics
{
virtual void vShutdown();
virtual void vRender(float, float, float, float);
};
class D3D11 : public D3D
{
public:
virtual bool vGetGraphics(HWND);
private:
bool CreatePipeline();
bool InitGraphics();
bool PrepareD3D(HWND);
};
D3D.cpp
// Initializes Direct3D
bool D3D11::vGetGraphics(HWND hWnd)
{
// Initialize Direct3D
bool rPrep = PrepareD3D(hWnd);
if (!rPrep)
{
return false;
}
// Create the pipeline
bool rPipe = CreatePipeline();
if (!rPipe)
{
return false;
}
// Initialize graphics
bool rInitG = InitGraphics();
if (!rInitG)
{
return false;
}
return true;
}
系统.cpp
bool System::Initialize()
{
// Create Windows interface
InitializeWindows();
auto dx11 = new D3D11();
bool rGetGraphics = dx11->vGetGraphics(hWnd);
if (!rGetGraphics)
{
return false;
}
return true;
}
如果有任何意见/建议或链接到一个伟大的DirectX教程,我们将不胜感激。谢谢
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 我可以在具有一个标头和一个接口的 cpp 文件中有多个嵌入吗?
- 是否覆盖Direct3D接口
- 我到底应该如何使用ID3DXFont接口?(Direct3D 11, c++)
- Direct3D COM接口发布的顺序重要吗?
- Direct3D类的接口