Merge version_2 into main #3
@@ -1,8 +1,6 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Lexend } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import ServiceWrapper from "@/providers/serviceWrapper/ServiceWrapper";
|
||||
import Tag from "@/components/tag/Tag";
|
||||
|
||||
const lexend = Lexend({
|
||||
variable: "--font-lexend", subsets: ["latin"],
|
||||
@@ -20,10 +18,7 @@ export default function RootLayout({
|
||||
return (
|
||||
<html lang="en" suppressHydrationWarning>
|
||||
<body className={`${lexend.variable}`}>
|
||||
<ServiceWrapper>
|
||||
<Tag />
|
||||
{children}
|
||||
</ServiceWrapper>
|
||||
{children}
|
||||
<script
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
|
||||
@@ -41,43 +41,43 @@ export const WebGLShader: React.FC<WebGLShaderProps> = ({
|
||||
|
||||
// Compile shaders
|
||||
const compileShader = (source: string, type: number): WebGLShader | null => {
|
||||
const shader = gl.createShader(type);
|
||||
const shader = (gl as WebGLRenderingContext).createShader(type);
|
||||
if (!shader) return null;
|
||||
gl.shaderSource(shader, source);
|
||||
gl.compileShader(shader);
|
||||
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
||||
console.error('Shader compilation error:', gl.getShaderInfoLog(shader));
|
||||
gl.deleteShader(shader);
|
||||
(gl as WebGLRenderingContext).shaderSource(shader, source);
|
||||
(gl as WebGLRenderingContext).compileShader(shader);
|
||||
if (!(gl as WebGLRenderingContext).getShaderParameter(shader, (gl as WebGLRenderingContext).COMPILE_STATUS)) {
|
||||
console.error('Shader compilation error:', (gl as WebGLRenderingContext).getShaderInfoLog(shader));
|
||||
(gl as WebGLRenderingContext).deleteShader(shader);
|
||||
return null;
|
||||
}
|
||||
return shader;
|
||||
};
|
||||
|
||||
const vShader = compileShader(vertexShader, gl.VERTEX_SHADER);
|
||||
const fShader = compileShader(fragmentShader, gl.FRAGMENT_SHADER);
|
||||
const vShader = compileShader(vertexShader, (gl as WebGLRenderingContext).VERTEX_SHADER);
|
||||
const fShader = compileShader(fragmentShader, (gl as WebGLRenderingContext).FRAGMENT_SHADER);
|
||||
|
||||
if (!vShader || !fShader) return;
|
||||
|
||||
// Link program
|
||||
const program = gl.createProgram();
|
||||
const program = (gl as WebGLRenderingContext).createProgram();
|
||||
if (!program) return;
|
||||
gl.attachShader(program, vShader);
|
||||
gl.attachShader(program, fShader);
|
||||
gl.linkProgram(program);
|
||||
(gl as WebGLRenderingContext).attachShader(program, vShader);
|
||||
(gl as WebGLRenderingContext).attachShader(program, fShader);
|
||||
(gl as WebGLRenderingContext).linkProgram(program);
|
||||
|
||||
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
||||
console.error('Program link error:', gl.getProgramInfoLog(program));
|
||||
gl.deleteProgram(program);
|
||||
if (!(gl as WebGLRenderingContext).getProgramParameter(program, (gl as WebGLRenderingContext).LINK_STATUS)) {
|
||||
console.error('Program link error:', (gl as WebGLRenderingContext).getProgramInfoLog(program));
|
||||
(gl as WebGLRenderingContext).deleteProgram(program);
|
||||
return;
|
||||
}
|
||||
|
||||
programRef.current = program;
|
||||
gl.useProgram(program);
|
||||
(gl as WebGLRenderingContext).useProgram(program);
|
||||
|
||||
// Store uniform locations
|
||||
const locations: Record<string, WebGLUniformLocation> = {};
|
||||
Object.keys(uniforms).forEach((name) => {
|
||||
const location = gl.getUniformLocation(program, name);
|
||||
const location = (gl as WebGLRenderingContext).getUniformLocation(program, name);
|
||||
if (location !== null) {
|
||||
locations[name] = location;
|
||||
}
|
||||
@@ -88,7 +88,7 @@ export const WebGLShader: React.FC<WebGLShaderProps> = ({
|
||||
const resizeCanvas = () => {
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
gl.viewport(0, 0, canvas.width, canvas.height);
|
||||
(gl as WebGLRenderingContext).viewport(0, 0, canvas.width, canvas.height);
|
||||
};
|
||||
|
||||
resizeCanvas();
|
||||
@@ -99,13 +99,13 @@ export const WebGLShader: React.FC<WebGLShaderProps> = ({
|
||||
-1, -1, 1, -1, -1, 1, 1, 1,
|
||||
]);
|
||||
|
||||
const vertexBuffer = gl.createBuffer();
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
||||
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
|
||||
const vertexBuffer = (gl as WebGLRenderingContext).createBuffer();
|
||||
(gl as WebGLRenderingContext).bindBuffer((gl as WebGLRenderingContext).ARRAY_BUFFER, vertexBuffer);
|
||||
(gl as WebGLRenderingContext).bufferData((gl as WebGLRenderingContext).ARRAY_BUFFER, vertices, (gl as WebGLRenderingContext).STATIC_DRAW);
|
||||
|
||||
const positionLocation = gl.getAttribLocation(program, 'position');
|
||||
gl.enableVertexAttribArray(positionLocation);
|
||||
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
|
||||
const positionLocation = (gl as WebGLRenderingContext).getAttribLocation(program, 'position');
|
||||
(gl as WebGLRenderingContext).enableVertexAttribArray(positionLocation);
|
||||
(gl as WebGLRenderingContext).vertexAttribPointer(positionLocation, 2, (gl as WebGLRenderingContext).FLOAT, false, 0, 0);
|
||||
|
||||
// Render loop
|
||||
const render = () => {
|
||||
@@ -114,15 +114,15 @@ export const WebGLShader: React.FC<WebGLShaderProps> = ({
|
||||
const location = uniformLocationsRef.current[name];
|
||||
if (!location) return;
|
||||
|
||||
if (type === '1f') gl.uniform1f(location, value);
|
||||
else if (type === '2f') gl.uniform2f(location, value[0], value[1]);
|
||||
else if (type === '3f') gl.uniform3f(location, value[0], value[1], value[2]);
|
||||
else if (type === '4f') gl.uniform4f(location, value[0], value[1], value[2], value[3]);
|
||||
else if (type === '1i') gl.uniform1i(location, value);
|
||||
else if (type === 'matrix4fv') gl.uniformMatrix4fv(location, false, value);
|
||||
if (type === '1f') (gl as WebGLRenderingContext).uniform1f(location, value);
|
||||
else if (type === '2f') (gl as WebGLRenderingContext).uniform2f(location, value[0], value[1]);
|
||||
else if (type === '3f') (gl as WebGLRenderingContext).uniform3f(location, value[0], value[1], value[2]);
|
||||
else if (type === '4f') (gl as WebGLRenderingContext).uniform4f(location, value[0], value[1], value[2], value[3]);
|
||||
else if (type === '1i') (gl as WebGLRenderingContext).uniform1i(location, value);
|
||||
else if (type === 'matrix4fv') (gl as WebGLRenderingContext).uniformMatrix4fv(location, false, value);
|
||||
});
|
||||
|
||||
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
||||
(gl as WebGLRenderingContext).drawArrays((gl as WebGLRenderingContext).TRIANGLE_STRIP, 0, 4);
|
||||
requestAnimationFrame(render);
|
||||
};
|
||||
|
||||
@@ -130,9 +130,9 @@ export const WebGLShader: React.FC<WebGLShaderProps> = ({
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('resize', resizeCanvas);
|
||||
gl.deleteProgram(program);
|
||||
gl.deleteShader(vShader);
|
||||
gl.deleteShader(fShader);
|
||||
(gl as WebGLRenderingContext).deleteProgram(program);
|
||||
(gl as WebGLRenderingContext).deleteShader(vShader);
|
||||
(gl as WebGLRenderingContext).deleteShader(fShader);
|
||||
};
|
||||
}, [fragmentShader, vertexShader, uniforms]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user