| | | |
|
| Форум Delphi: OpenGL и DShow |
|
|
Форумы Delphi OpenGL и DShow (Всего сообщений: 5) | Страницы: 01 |
|
|
1 | #6680 | цитата | 26-01-2018 21:09 |
Здравствуйте уважаемые форумчане! У меня такой вопрос, я пишу библеотеку для воспроизведения видео и хочу сделать рендер через OpenGL так вот проблема в том что вместо текстуры я получаю просто белый куб, т.е почему-то переменная bits не загружается в текстуру
хотя если делать рендер на канву формы через StretchDIBits то всё отлично рендерится. в чем может быть проблемма?
код:
Cпойлер (щелкните, чтобы прочесть) | var
Bits: PByte;
...
procedure TfrmRenderer.DoRenderSample(Sample : IMediaSample);
begin
Sample.GetPointer(bits);
// StretchDIBits(Canvas.Handle,
// 0, 0, ClientWidth, ClientHeight,
// 0, 0, FWidth, FHeight,
// Bits, PBitmapInfo(@fFormat.bmiHeader)^,
// DIB_RGB_COLORS, SRCCOPY);
end;
procedure TfrmRenderer.SetupGL;
begin
glClearColor(0.3,0.4,0.7,0.0);
glEnable(GL_DEPTH_TES ;
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TES ;
glAlphaFunc(GL_GREATER,0.9);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEARES ;
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEARES ;
end;
procedure TfrmRenderer.Render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BI ;
glViewport(0,0,ClientWidth,ClientHeigh ;
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45.0,ClientWidth/ClientHeight,NearClipping,FarClipping);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0,0,-3);
glBindTexture(GL_TEXTURE_2D,gltexture);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(-1, 1, -1);
glTexCoord2f(1, 0); glVertex3f(1, 1, -1);
glTexCoord2f(1, 1); glVertex3f(1, 1, 1);
glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);
GLEnd;
SwapBuffers(dc);
end;
procedure TfrmRenderer.IdleHandler(Sender : TObject; var Done : Boolean);
begin
Render;
Sleep(1);
Done := False;
if bits<>nil then
LoadTextureFromByte(bits,gltexture,fWidth,fHeigh ;
end;
function CreateTexture(Width, Height, Format:Word;pData:Pointer):Integer;
var
Texture : GLuint;
begin
glGenTextures(1, Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
if Format = GL_RGBA then
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,Width,Height,GL_RGBA,GL_UNSIGNED_BYTE, pData)
else
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, pData);
result :=Texture;
end;
function LoadByteTexture(pData: pointer; var Texture : GLuint; width,height:integer) : Boolean;
begin
Texture :=CreateTexture(Width, Height, GL_RGB, pData);
result :=TRUE;
end;
function LoadTextureFromByte(fData: Pointer; var Texture : GLuint; width,height:integer) : Boolean;
begin
LoadByteTexture(fData,Texture,width,heigh
end;
|
|
|
| |
|
2 | #6681 | цитата | 27-01-2018 12:06 |
Кажется проблемма в том что когда я Вызываю процедуру idlehandler из DoRender то она вызывается (Trace показал что все функции вызываются по порядку и возвращают нормальные значения, все переменные тоже заполняются правильно) но отрисовка не происходит. функция DoRender объявлена в Baseclasses dspack в TBCBaseRenderer function DoRenderSample(MediaSample: IMediaSample): HResult; virtual; abstract; не могу понять почему функция выполняется а вывода нет |
|
| |
|
3 | #6682 | цитата | 27-01-2018 12:06 |
Кажется проблемма в том что когда я Вызываю процедуру idlehandler из DoRender то она вызывается (Trace показал что все функции вызываются по порядку и возвращают нормальные значения, все переменные тоже заполняются правильно) но отрисовка не происходит. функция DoRender объявлена в Baseclasses dspack в TBCBaseRenderer function DoRenderSample(MediaSample: IMediaSample): HResult; virtual; abstract; не могу понять почему функция выполняется а вывода нет |
|
| | | |
Форумы Delphi OpenGL и DShow (Всего сообщений: 5) | Страницы: 01 |
| Тему просматривают: 2 гостей, 0 пользователей |
|
| OpenGL и DShow | Ответов: 5 |
|
|
|
|
Мини-чат :) |
|
|
Статистика |
| Сегодня | Всего |
Посетителей | 4369 | 4254266 |
Запросов | 186317 | 397036626 |
Online |
Пользователей | 0 |
Гостей | 483 |
|
|
|