1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
function glFeedbackBuffer( bufsize, buftype, bufferptr )
% glFeedbackBuffer Interface to OpenGL function glFeedbackBuffer
%
% usage: glFeedbackBuffer( bufsize, buftype, bufferptr )
%
% bufsize is the number of float values that can be written into the buffer.
% Caution: A float takes up 4 bytes, so the size of the allocated buffer needs
% to be at least 4*bufsize!
%
% buftype is a GLenum specifiying the type of requested information. See OpenGL manual.
%
% bufferptr is a pointer to a buffer allocated via bufferptr=moglmalloc() or bufferptr=moglcalloc().
%
% Example of usage:
%
% 1. Allocate a buffer of proper size to hold the information you want OpenGL to return:
% bufferptr = moglmalloc(bufsize * 4);
%
% 2. Set this memory buffer as feedback buffer and tell GL which kind of info about each
% primitive should be fed back. E.g., GL.2D would return projected 2D screen coordinates of
% each transformed vertex.
% glFeedbackBuffer(bufsize, GL.2D, bufferptr);
%
% 3. Switch OpenGL from normal rasterization (=drawing) mode into feedback mode. Executing
% drawing commands will not create any visible drawing, but will only store the results
% of geometric transform, culling and lighting operations into your buffer 'bufferptr':
% glRenderMode(GL.FEEDBACK);
%
% 4. Draw your scene...
%
% 5. Switch back to normal rendering. This will return the number of actually fed back items:
% itemcount = glRenderMode(GL.RENDER);
%
% 6. Return the content of the memory feedback buffer as a new Matlab matrix:
% myfeedbackresult = moglgetbuffer(bufferptr, GL.FLOAT, itemcount*4);
%
% 7. Interpret and use content of myfeedbackresult as described in the manual for glFeedbackBuffer.
%
% C function: void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat* buffer)
% 16-May-2006 -- created by MK.
% ---allocate---
% ---protected---
if nargin < 1 || isempty(bufsize) || bufsize <1
error('Missing or invalid bufsize argument.');
end;
if nargin < 2 || isempty(buftype)
error('Missing buftype argument.');
end;
if nargin < 3 || isempty(bufferptr)
error('Missing bufferptr argument.');
end;
moglcore( 'glFeedbackBuffer', bufsize, buftype, bufferptr );
return
|