aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h')
-rw-r--r--APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h b/APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h
new file mode 100644
index 00000000..77d86eb6
--- /dev/null
+++ b/APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
+*
+* NVIDIA CORPORATION and its licensors retain all intellectual property
+* and proprietary rights in and to this software, related documentation
+* and any modifications thereto. Any use, reproduction, disclosure or
+* distribution of this software and related documentation without an express
+* license agreement from NVIDIA CORPORATION is strictly prohibited.
+*/
+
+#ifndef APEX_RENDER_MATERIAL_H
+#define APEX_RENDER_MATERIAL_H
+
+#include "Apex.h"
+#include "Utils.h"
+#include "DirectXTex.h"
+
+#pragma warning(push)
+#pragma warning(disable : 4350)
+#include <string>
+#include <vector>
+#include <list>
+#pragma warning(pop)
+
+#pragma warning(disable : 4512)
+
+using namespace nvidia;
+using namespace nvidia::apex;
+using namespace std;
+
+class ApexResourceCallback;
+
+struct TextureResource
+{
+ DirectX::TexMetadata metaData;
+ DirectX::ScratchImage image;
+};
+
+class ApexRenderMaterial
+{
+ public:
+
+ enum BlendMode
+ {
+ BLEND_NONE,
+ BLEND_ALPHA_BLENDING,
+ BLEND_ADDITIVE
+ };
+
+ ApexRenderMaterial(ApexResourceCallback* resourceProvider, const char* xmlFilePath);
+ ApexRenderMaterial(ApexResourceCallback* resourceProvider, const NvParameterized::Interface *graphicMaterialData);
+ ApexRenderMaterial(ApexResourceCallback* resourceProvider, const char* shaderFileName, const char* textureFileName, BlendMode blendMode = BLEND_NONE);
+ ~ApexRenderMaterial();
+
+ void setBlending(BlendMode blendMode);
+ void reload();
+
+ class Instance
+ {
+ public:
+ Instance(ApexRenderMaterial& material, ID3D11InputLayout* inputLayout, uint32_t shaderNum = 0) : mMaterial(material), mInputLayout(inputLayout), mShaderNum(shaderNum) {}
+ ~Instance() { SAFE_RELEASE(mInputLayout); }
+
+ bool isValid();
+ void bind(ID3D11DeviceContext& context, uint32_t slot);
+ private:
+ ApexRenderMaterial& mMaterial;
+ ID3D11InputLayout* mInputLayout;
+ uint32_t mShaderNum;
+ };
+
+ Instance* getMaterialInstance(const D3D11_INPUT_ELEMENT_DESC* elementDescs, uint32_t numElements);
+
+ private:
+ void initialize(ApexResourceCallback* resourceCallback, const char* shaderFileName, const char* textureFileName, BlendMode blendMode);
+ void initialize(ApexResourceCallback* resourceProvider, vector<string> shaderFileNames, const char* textureFileName, BlendMode blendMode);
+
+ void releaseReloadableResources();
+
+ string mShaderFileName;
+ string mTextureFileName;
+
+ struct ShaderGroup
+ {
+ ShaderGroup() : vs(NULL), gs(NULL), ps(NULL)
+ {
+ }
+ ~ShaderGroup()
+ {
+ Release();
+ }
+ void Release()
+ {
+ SAFE_RELEASE(vs);
+ SAFE_RELEASE(gs);
+ SAFE_RELEASE(ps);
+ SAFE_RELEASE(buffer);
+ }
+ void Set(ID3D11DeviceContext* c)
+ {
+ c->VSSetShader(vs, nullptr, 0);
+ c->GSSetShader(gs, nullptr, 0);
+ c->PSSetShader(ps, nullptr, 0);
+ }
+ bool IsValid()
+ {
+ return vs != NULL && ps != NULL;
+ }
+ ID3D11VertexShader* vs;
+ ID3D11GeometryShader* gs;
+ ID3D11PixelShader* ps;
+ ID3DBlob* buffer;
+ };
+
+ list<Instance*> mInstances;
+ TextureResource* mTexture;
+ ID3D11ShaderResourceView* mTextureSRV;
+ ID3D11BlendState* mBlendState;
+ vector<string> mShaderFilePathes;
+ vector<ShaderGroup*> mShaderGroups;
+};
+
+#endif \ No newline at end of file