Family Day update
This commit is contained in:
parent
aac6731f2c
commit
9ad63ea473
2442 changed files with 39761 additions and 8255 deletions
88
Task/OpenGL/Perl-6/opengl.pl6
Normal file
88
Task/OpenGL/Perl-6/opengl.pl6
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
use NativeCall;
|
||||
|
||||
class Window is repr('CPointer') {}
|
||||
class Monitor is repr('CPointer') {}
|
||||
|
||||
# GLFW
|
||||
|
||||
constant $lib = ('glfw', v3);
|
||||
|
||||
sub glfwInit(--> int32) is native($lib) {*}
|
||||
sub glfwCreateWindow(int32, int32, Str, Monitor, Window --> Window) is native($lib) {*}
|
||||
sub glfwTerminate() is native($lib) {*}
|
||||
sub glfwMakeContextCurrent(Window) is native($lib) {*}
|
||||
sub glfwSetWindowShouldClose(Window, int32(Bool)) is native($lib) {*}
|
||||
sub glfwWindowShouldClose(Window --> int32) is native($lib) {*}
|
||||
sub glfwSwapBuffers(Window) is native($lib) {*}
|
||||
sub glfwSwapInterval(int32) is native($lib) {*}
|
||||
sub glfwPollEvents() is native($lib) {*}
|
||||
sub glfwGetFramebufferSize(Window, int32 is rw, int32 is rw) is native($lib) {*}
|
||||
|
||||
# OpenGL
|
||||
|
||||
enum PrimitiveMode(
|
||||
GL_TRIANGLES => 0x0004,
|
||||
);
|
||||
|
||||
enum MatrixMode(
|
||||
GL_MATRIX_MODE => 0x0BA0,
|
||||
GL_MODELVIEW => 0x1700,
|
||||
GL_PROJECTION => 0x1701,
|
||||
);
|
||||
|
||||
constant $gllib = 'GL';
|
||||
|
||||
sub glViewport(int32, int32, int32, int32) is native($gllib) {*}
|
||||
sub glClear(int32) is native($gllib) {*}
|
||||
sub glMatrixMode(int32) is native($gllib) {*}
|
||||
sub glLoadIdentity() is native($gllib) {*}
|
||||
sub glOrtho(num64, num64, num64, num64, num64, num64) is native($gllib) {*}
|
||||
sub glRotatef(num32, num32, num32, num32) is native($gllib) {*}
|
||||
sub glBegin(int32) is native($gllib) {*}
|
||||
sub glColor3f(num32, num32, num32) is native($gllib) {*}
|
||||
sub glVertex3f(num32, num32, num32) is native($gllib) {*}
|
||||
sub glEnd() is native($gllib) {*}
|
||||
|
||||
constant GL_COLOR_BUFFER_BIT = 0x00004000;
|
||||
|
||||
die 'Failed to initialize GLFW' unless glfwInit().so;
|
||||
|
||||
my $w = glfwCreateWindow(640, 480, "OpenGL Triangle", Nil, Nil);
|
||||
without $w { glfwTerminate(); die 'Failed to create window' }
|
||||
|
||||
glfwMakeContextCurrent($w);
|
||||
glfwSwapInterval(1);
|
||||
|
||||
while not glfwWindowShouldClose($w) {
|
||||
my num32 $ratio;
|
||||
my int32 $width;
|
||||
my int32 $height;
|
||||
|
||||
glfwGetFramebufferSize($w, $width, $height);
|
||||
$ratio = ($width / $height).Num;
|
||||
|
||||
glViewport(0, 0, $width, $height);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-$ratio, $ratio, -1e0, 1e0, 1e0, -1e0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
glLoadIdentity();
|
||||
glRotatef((now % 360 * 100e0) , 0e0, 0e0, 1e0);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(1e0, 0e0, 0e0);
|
||||
glVertex3f(5e-1, -2.88e-1, 0e0);
|
||||
glColor3f(0e0, 1e0, 0e0);
|
||||
glVertex3f(-5e-1, -2.88e-1, 0e0);
|
||||
glColor3f(0e0, 0e0, 1e0);
|
||||
glVertex3f( 0e0, 5.73e-1, 0e0);
|
||||
glEnd();
|
||||
|
||||
glfwSwapBuffers($w);
|
||||
glfwPollEvents();
|
||||
}
|
||||
|
||||
glfwTerminate();
|
||||
Loading…
Add table
Add a link
Reference in a new issue