1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00
Beef/BeefLibs/Beefy2D/src/gfx/Shader.bf

83 lines
2.4 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using System.Collections;
2019-08-23 11:56:54 -07:00
using System.Text;
namespace Beefy.gfx
{
public class ShaderParam
{
public void* mNativeShaderParam;
public this(void* shaderParam)
2019-08-23 11:56:54 -07:00
{
}
}
#if !STUDIO_CLIENT
public class Shader
{
public void* mNativeShader;
public Dictionary<String, ShaderParam> mShaderParamMap;
2020-05-25 20:46:28 +08:00
[CallingConvention(.Stdcall), CLink]
2019-08-23 11:56:54 -07:00
static extern void* Gfx_LoadShader(char8* fileName, void* vertexDefinition);
2020-05-25 20:46:28 +08:00
[CallingConvention(.Stdcall), CLink]
2019-08-23 11:56:54 -07:00
static extern void* Gfx_Shader_Delete(void* shader);
2020-05-25 20:46:28 +08:00
[CallingConvention(.Stdcall), CLink]
2019-08-23 11:56:54 -07:00
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)
2019-08-23 11:56:54 -07:00
{
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
}