Cirno2022/script/sample/SampleVS01.txt

65 lines
1.6 KiB
Plaintext
Raw Normal View History

#TouhouDanmakufu[Stage]
#ScriptVersion[3]
#Title["SampleVS01"]
#Text["SampleVS01: Basic Vertex Shaders"]
@Initialize {
TSample();
}
@MainLoop {
if (GetKeyState(KEY_Q) == KEY_PUSH)
CloseStgScene();
yield;
}
task TSample() {
let dir = GetCurrentScriptDirectory();
let path = dir ~ "../default_system/img/Default_Background_IceMountain_Spell01.png";
let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
Obj_SetRenderPriorityI(obj, 23);
ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
ObjPrim_SetTexture(obj, path);
//Please do not actually use 10000 vertices
let VC = 5000;
ObjPrim_SetVertexCount(obj, VC * 2);
ObjRender_SetPosition(obj, 192, 224, 1);
ascent (i in 0..VC) {
let v_angle = 360 / (VC - 1) * i;
let tex_v = 1 / (VC - 1) * i;
ObjPrim_SetVertexPosition(obj, i * 2, 0, 0, 1);
ObjPrim_SetVertexPosition(obj, i * 2 + 1, 240 * cos(v_angle), 240 * sin(v_angle), 1);
ObjPrim_SetVertexUV(obj, i * 2, 0, tex_v);
ObjPrim_SetVertexUV(obj, i * 2 + 1, 1, tex_v);
}
//Enables vertex shader rendering.
//If this is set to true and a vertex+pixel shader isn't used, rendering will always fail.
ObjRender_SetVertexShaderRenderingMode(obj, true);
ObjShader_SetShaderF(obj, dir ~ "SampleVS01_HLSL.txt");
ObjShader_SetTechnique(obj, "Render");
let t = 0;
while (true) {
ObjShader_SetFloat(obj, "frame_", t);
/*
//Equivalent to these
ascent(i in 0..VC){
let tex_v = 1 / (VC - 1) * i;
ObjPrim_SetVertexUV(obj, i * 2, 0 - t, tex_v);
ObjPrim_SetVertexUV(obj, i * 2 + 1, 1 - t, tex_v);
}
*/
t += 0.006;
t %= 1;
yield;
}
}