1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00
Beef/BeefLibs/Beefy2D/src/gfx/Shader.bf
2020-05-25 20:46:28 +08:00

82 lines
2.4 KiB
Beef

using System;
using System.Collections;
using System.Text;
namespace Beefy.gfx
{
public class ShaderParam
{
public void* mNativeShaderParam;
public this(void* shaderParam)
{
}
}
#if !STUDIO_CLIENT
public class Shader
{
public void* mNativeShader;
public Dictionary<String, ShaderParam> mShaderParamMap;
[CallingConvention(.Stdcall), CLink]
static extern void* Gfx_LoadShader(char8* fileName, void* vertexDefinition);
[CallingConvention(.Stdcall), CLink]
static extern void* Gfx_Shader_Delete(void* shader);
[CallingConvention(.Stdcall), CLink]
static extern void* Gfx_GetShaderParam(void* shader, String paramName);
public static Shader CreateFromFile(String fileName, VertexDefinition vertexDefinition)
{
void* aNativeShader = Gfx_LoadShader(fileName, vertexDefinition.mNativeVertexDefinition);
if (aNativeShader == null)
return null;
Shader aShader = new Shader(aNativeShader);
return aShader;
}
public this(void* nativeShader)
{
mNativeShader = nativeShader;
}
public ~this()
{
Gfx_Shader_Delete(mNativeShader);
}
ShaderParam GetParam(String paramName)
{
ShaderParam aShaderParam = null;
if (!mShaderParamMap.TryGetValue(paramName, out aShaderParam))
{
void* nativeShaderParam = Gfx_GetShaderParam(mNativeShader, paramName);
if (nativeShaderParam != null)
aShaderParam = new ShaderParam(nativeShaderParam);
mShaderParamMap[paramName] = aShaderParam;
}
return aShaderParam;
}
}
#else
public class Shader : IStudioShader
{
public IPCProxy<IStudioShader> mStudioShader;
public static Shader CreateFromFile(string fileName, VertexDefinition vertexDefinition)
{
Shader shader = new Shader();
IPCObjectId objId = BFApp.StudioHostProxy.CreateShaderFromFile(fileName, vertexDefinition.mStudioVertexDefinition);
shader.mStudioShader = IPCProxy<IStudioShader>.Create(objId);
return shader;
}
internal Shader()
{
}
}
#endif
}