From 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 Mon Sep 17 00:00:00 2001 From: git perforce import user Date: Tue, 25 Oct 2016 12:29:14 -0600 Subject: Initial commit: PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167] --- .../samples_v2/SampleBase/ApexRenderMaterial.h | 123 +++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h (limited to 'APEX_1.4/samples_v2/SampleBase/ApexRenderMaterial.h') 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 +#include +#include +#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 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 mInstances; + TextureResource* mTexture; + ID3D11ShaderResourceView* mTextureSRV; + ID3D11BlendState* mBlendState; + vector mShaderFilePathes; + vector mShaderGroups; +}; + +#endif \ No newline at end of file -- cgit v1.2.3