Esempio n. 1
0
        public static ShaderParameter[] ShaderParameters(ObjectInstance input)
        {
            List <ShaderParameter> output = new List <ShaderParameter>();

            foreach (var value in input.Properties)
            {
                ShaderUniformDataType type = ShaderUniformDataType.SHADER_UNIFORM_FLOAT;
                object property            = value.Value;
                switch (value.Value)
                {
                case double _:
                    type     = ShaderUniformDataType.SHADER_UNIFORM_FLOAT;
                    property = (float)((double)property);
                    break;

                case int _:
                    type     = ShaderUniformDataType.SHADER_UNIFORM_FLOAT;
                    property = (float)((int)property);
                    break;

                case ObjectInstance _:
                    type = ShaderUniformDataType.SHADER_UNIFORM_VEC4;
                    var vec4      = Vector4((ObjectInstance)property);
                    var floatsize = Marshal.SizeOf(typeof(float));
                    var ptr       = Marshal.AllocHGlobal(floatsize * 4);
                    Marshal.StructureToPtr(vec4, ptr, false);
                    property = ptr;
                    break;

                case string _:
                    type     = ShaderUniformDataType.SHADER_UNIFORM_SAMPLER2D;
                    property = Assets.PixelBuffer((string)property).texture;
                    break;
                }

                output.Add(new ShaderParameter(
                               (string)value.Key,
                               property,
                               type
                               ));
            }

            return(output.ToArray());
        }
Esempio n. 2
0
        //public unsafe static ObjectInstance Object(Model model)
        //{
        //var mesh = ((Mesh*)model.meshes)[0];
        //var output = JS.instance.engine.Object.Construct();
        //output.SetPropertyValue("position", Object(model.position), true);
        //output.SetPropertyValue("direction", Object(model.direction), true);
        //return output;
        //}

        public static Model Model(ObjectInstance input)
        {
            Mesh output = new Mesh();

            // necessary stuff
            var vertices = Vector3Array((ObjectInstance)input.GetPropertyValue("vertices"));

            output.vertexCount = vertices.Length;
            output.vertices    = ArrayPointer(vertices);

            // optionals
            if (input.HasProperty("indices"))
            {
                var indices = ShortArray((ObjectInstance)input.GetPropertyValue("indices"));
                output.triangleCount = indices.Length / 3;
                output.indices       = ArrayPointer(indices);
            }

            if (input.TryGetPropertyValue("uvs", out object uvs))
            {
                output.texcoords = ArrayPointer(Vector2Array((ObjectInstance)uvs));
            }
            if (input.TryGetPropertyValue("uv2s", out object uv2s))
            {
                output.texcoords2 = ArrayPointer(Vector2Array((ObjectInstance)uv2s));
            }
            if (input.TryGetPropertyValue("normals", out object normals))
            {
                output.normals = ArrayPointer(Vector3Array((ObjectInstance)normals));
            }
            if (input.TryGetPropertyValue("tangents", out object tangents))
            {
                output.tangents = ArrayPointer(Vector3Array((ObjectInstance)tangents));
            }
            if (input.TryGetPropertyValue("colors", out object colors))
            {
                output.colors = ArrayPointer(Color32Array((ObjectInstance)colors));
            }

            Raylib.UploadMesh(ref output, false);

            Model model = Raylib.LoadModelFromMesh(output);

            if (input.TryGetPropertyValue("texture", out object texturePath))
            {
                Texture2D texture;
                if (!Assets.LoadPath((string)texturePath, out _))
                {
                    texture = PixelBuffer.missing.texture;
                }
                else
                {
                    texture = Assets.PixelBuffer((string)texturePath).texture;
                }
                SetMaterialTexture(ref model, 0, MaterialMapIndex.MATERIAL_MAP_DIFFUSE, ref texture);
            }
            else
            {
                var texture = PixelBuffer.missing.texture;
                SetMaterialTexture(ref model, 0, MaterialMapIndex.MATERIAL_MAP_DIFFUSE, ref texture);
            }

            return(model);
        }