⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x_opengl.pas

📁 你想用javaScript来开发windows程序吗?你想用javaScript来开发OpenGl程序吗?你还在为你的游戏使用什么脚本语言而烦恼吗?那就来看看javaScript开发平台。把javaS
💻 PAS
字号:
unit X_OpenGL;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  ComObj, ActiveX,OpenGL,messages,ExtCtrls,UserMsg,SysUtils, StdVcl,X_StdLib_TLB,Forms,Windows;

type
  TX_GL = class(TAutoObject, IX_GL)
  private
    procedure glFormPaint(Sender:TObject);
    procedure glFormResize(Sender:TObject);
    procedure SetUpRC(handle:integer);
  protected
    procedure _glClear(mask: Integer); safecall;
    procedure _glClearColor(red, green, blue, alpha: Single); safecall;
    procedure _glFlush; safecall;
    procedure _xglutCreateWindow(const title: WideString); safecall;
    procedure _InitGraphicApp(Handle: Integer); safecall;
    procedure _xglutDisplayFunc(const f: WideString); safecall;
    procedure _xglutMainLoop; safecall;
    procedure _glViewport(x, y, width, height: Integer); safecall;
    procedure _glMatrixMode(mode: Integer); safecall;
    procedure _glLoadIdentity; safecall;
    procedure _glOrtho(left, right, bottom, top, zNear, zFar: Integer);
      safecall;
    procedure _glRectf(x1, y1, x2, y2: Single); safecall;
    procedure _xglutReshapeFunc(const f: WideString); safecall;
    procedure _SwapBuffers; safecall;
    procedure _glColor3f(red, green, blue: Single); safecall;
    procedure _glPushMatrix; safecall;
    procedure _glRotatef(angle, x, y, z: Single); safecall;
    procedure _glBegin(mode: Integer); safecall;
    procedure _glEnd; safecall;
    procedure _glPopMatrix; safecall;
    procedure _glVertex3f(x, y, z: Single); safecall;

    { Protected declarations }
  end;

var
    glForm:TForm=nil;            //主窗体对象
    timer:Ttimer=nil;
    AppHandle:Integer;
implementation

uses ComServ;

procedure TX_GL._glClear(mask: Integer);
begin
    glClear(mask);
end;

procedure TX_GL._glClearColor(red, green, blue, alpha: Single);
begin
    glClearColor(red, green, blue, alpha);
end;

procedure TX_GL._glFlush;
begin
    glFlush;
end;


procedure TX_GL._xglutCreateWindow(const title: WideString);
begin
    if not assigned(glForm) then
    begin
        glForm:=TForm.create(nil);
        timer:=Ttimer.Create(glform);
        SetUpRC(glform.Handle);
    end;
    glForm.caption:=title;
 //   glForm.OnPaint:=glFormPaint;
 //   glForm.OnResize:=glFormResize;
    timer.Enabled:=false;
    timer.Interval:=1;
  //  timer.OnTimer:=glFormPaint;
    glForm.show;

end;

procedure TX_GL.glFormPaint(Sender:TObject);
begin
   Sendmessage(AppHandle,cardinal(WM_GLFORMPAINT),0,0);
end;


procedure TX_GL._InitGraphicApp(Handle: Integer);
begin
    AppHandle:=Handle;
end;


procedure TX_GL._xglutDisplayFunc(const f: WideString);     //
var ds: TCopyDataStruct;
      s:string;
begin
      glForm.OnPaint:=glFormPaint;
      s:=f;
      ds.dwData:=0;
      ds.cbData := Length(s) + 1;
      GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -