Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > glutGet в скриншоте


Автор: ovod 8.7.2004, 19:42
Делаю

Код
{$APPTYPE CONSOLE}
program screenshot;

type
GLint   = Integer;
GLenum  = Cardinal;
GLubyte = Byte;
GLsizei = Integer;

PGLint  = ^GLint;

const
GL_FRONT             = $0404;
GL_PACK_ALIGNMENT    = $0D05;
GL_READ_BUFFER       = $0C02;
GLUT_WINDOW_WIDTH    = 102;
GLUT_WINDOW_HEIGHT   = 103;
GL_RGB               = $1907;
GL_UNSIGNED_BYTE     = $1401;


Procedure glGetIntegerv(pname: GLenum; params: PGLint);
                           stdcall; external 'OPENGL32.DLL';
Procedure glReadBuffer(mode: GLenum);
                           stdcall; external 'OPENGL32.DLL';
Procedure glPixelStorei(pname: GLenum; param: GLint);
                           stdcall; external 'OPENGL32.DLL';
Procedure glReadPixels(x: GLint; y: GLint; width: GLsizei; height: GLsizei;
                      format: GLenum; atype: GLenum; ppixels: Pointer);
                           stdcall; external 'OPENGL32.DLL';
function glutGet(gltype: GLenum):integer;
                           stdcall; external 'GLUT32.DLL';

var
oldbuffer:PGLint;
oldalignment:PGLint;

procedure ScreenShotToFile(fname:string);
var
fp:file;
ww:integer;
wh:integer;
npixels:integer;
pixels:array of GLubyte;
p:pointer;
begin

// Save the read buffer state.
glGetIntegerv( GL_READ_BUFFER, oldbuffer );
glReadBuffer( GL_FRONT );

// Save the alignment state.
glGetIntegerv( GL_PACK_ALIGNMENT, oldalignment );
glPixelStorei( GL_PACK_ALIGNMENT, 1);


ww := glutGet( GLenum ( GLUT_WINDOW_WIDTH ) );
wh := glutGet( GLenum ( GLUT_WINDOW_HEIGHT ) );

Код
npixels:=ww*wh;
setlength(pixels,length(pixels)+npixels*3);

// Restore the GL state.
glPixelStorei( GL_PACK_ALIGNMENT, oldalignment^ );
glReadBuffer( oldbuffer^ );
end;

begin
 ScreenShotToFile('scr.bin');
end.


В красном месте ошибка о чтении памяти. В чем дело? Как пофиксить?

Автор: Girder 9.7.2004, 13:31
Проверь если glutGetWindow=0 то нет текущего окна, размеры которого ты хочеш узнать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)