material system? am i bikeshedding?

This commit is contained in:
41666 2023-10-10 21:16:22 -04:00
parent 2a19346038
commit 2b971ecc2a
5 changed files with 49 additions and 2 deletions

View file

@ -0,0 +1,6 @@
#version 300 es
precision highp float;
void main() {
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
}

View file

@ -0,0 +1,7 @@
import { Shader } from "../renderer/shader";
import { WebGLApp } from "../renderer/webgl";
import frag from "./basic.frag";
import vert from "./basic.vert";
export const basic = (app: WebGLApp) =>
new Shader({}).vertex(vert).fragment(frag).app(app);

View file

@ -0,0 +1,9 @@
#version 300 es
attribute vec4 aVertexPosition;
uniform mat4 uModelViewMatrix;
uniform mat4 uProjectionMatrix;
void main() {
gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;
}

9
src/renderer/material.ts Normal file
View file

@ -0,0 +1,9 @@
import { Shader } from "./shader";
export type MaterialConfig = {
shader: Shader;
};
export class Material {
constructor(public config: MaterialConfig) {}
}

View file

@ -2,15 +2,31 @@ import { mat4, vec3 } from "gl-matrix";
import { Transform } from "./transform";
import { WebGLApp } from "./webgl";
/**
* Uniform/Attribute locations
*/
export type ShaderConfig = {
time?: boolean;
// Engine rendering features
model?: 0; // always zero to ensure we render correctly. This is implied.
view?: number;
projection?: number;
world?: number;
light0?: number;
light0Color?: number;
uv0?: number;
normals?: number;
vertexColor?: number;
time?: number;
// other reasons (like materials)
material?: { [key: string]: number };
};
export class Shader {
static VERTEX = 35633;
static FRAGMENT = 35632;
constructor(private config: ShaderConfig = {}) {}
constructor(private config: ShaderConfig) {}
private vertexCode = "";
private fragmentCode = "";