// Copyright PICO Technology Co., Ltd. All rights reserved. // This plugin incorporates portions of the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc. in the United States of America and elsewhere. // Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "RHI.h" #include "RenderResource.h" #include "ShaderParameters.h" #include "Shader.h" #include "GlobalShader.h" #include "ShaderParameterUtils.h" /** * A pixel shader for rendering a textured screen element. */ class FPICOCubemapPS : public FGlobalShader { DECLARE_EXPORTED_SHADER_TYPE(FPICOCubemapPS, Global, PICOXRHMD_API); public: static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters) { return true; } FPICOCubemapPS(const ShaderMetaType::CompiledShaderInitializerType& Initializer) : FGlobalShader(Initializer) { InTexture.Bind(Initializer.ParameterMap, TEXT("InTextureCube"), SPF_Mandatory); InTextureSampler.Bind(Initializer.ParameterMap, TEXT("InTextureSampler")); InFaceIndexParameter.Bind(Initializer.ParameterMap, TEXT("CubeFaceIndex")); } FPICOCubemapPS() {} void SetParameters(FRHIBatchedShaderParameters& BatchedParameters, const FTexture* Texture, int FaceIndex) { SetTextureParameter(BatchedParameters, InTexture, InTextureSampler, Texture); SetShaderValue(BatchedParameters, InFaceIndexParameter, FaceIndex); } void SetParameters(FRHIBatchedShaderParameters& BatchedParameters, FRHISamplerState* SamplerStateRHI, FRHITexture* TextureRHI, int FaceIndex) { SetTextureParameter(BatchedParameters, InTexture, InTextureSampler, SamplerStateRHI, TextureRHI); SetShaderValue(BatchedParameters, InFaceIndexParameter, FaceIndex); } private: LAYOUT_FIELD(FShaderResourceParameter, InTexture); LAYOUT_FIELD(FShaderResourceParameter, InTextureSampler); LAYOUT_FIELD(FShaderParameter, InFaceIndexParameter); };