65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
#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;
|
|
}
|
|
}
|
|
|