diff --git a/src/common-shaders/basic.frag b/src/common-shaders/basic.frag new file mode 100644 index 0000000..38a8691 --- /dev/null +++ b/src/common-shaders/basic.frag @@ -0,0 +1,6 @@ +#version 300 es +precision highp float; + +void main() { + gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); +} \ No newline at end of file diff --git a/src/common-shaders/basic.ts b/src/common-shaders/basic.ts new file mode 100644 index 0000000..4fbf932 --- /dev/null +++ b/src/common-shaders/basic.ts @@ -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); diff --git a/src/common-shaders/basic.vert b/src/common-shaders/basic.vert new file mode 100644 index 0000000..333d47c --- /dev/null +++ b/src/common-shaders/basic.vert @@ -0,0 +1,9 @@ +#version 300 es +attribute vec4 aVertexPosition; + +uniform mat4 uModelViewMatrix; +uniform mat4 uProjectionMatrix; + +void main() { + gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition; +} \ No newline at end of file diff --git a/src/renderer/material.ts b/src/renderer/material.ts new file mode 100644 index 0000000..5be9b3c --- /dev/null +++ b/src/renderer/material.ts @@ -0,0 +1,9 @@ +import { Shader } from "./shader"; + +export type MaterialConfig = { + shader: Shader; +}; + +export class Material { + constructor(public config: MaterialConfig) {} +} diff --git a/src/renderer/shader.ts b/src/renderer/shader.ts index 1b59f18..5593cd8 100644 --- a/src/renderer/shader.ts +++ b/src/renderer/shader.ts @@ -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 = "";