Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2014, 09:11   #1
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
Вопрос Проблема Aero glass + OpenGL

Вот с такой проблеммой прозрачности я столкнулся.
У 60% тестирующих всё нормально, как на левой стороне картинки, у остальных же как на правой

причём на виртуальной машине так же, чёрный фон.

тестировал на новом дешёвеньком ноутбуке (НЕ игровом) всё нормально Aero Glass работает

и кстати ещё такая особенность у кого чёрный фон то отображается поверх всех окон, и даже поверх экрана приветствия


в чём может быть проблема? и как её можно решить?
рендерить в битмап отпадает, так как сильно нагружает процессор.
DJDrugsounD вне форума Ответить с цитированием
Старый 25.04.2014, 09:57   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы куда рендерите то?

так же боюсь что код будет все же нужен.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.04.2014, 10:27   #3
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы куда рендерите то?
рендерю на хэндл формы


Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
так же боюсь что код будет все же нужен.
я использую библиотеку GLEngine

вот создаю форму
Код:
Fform := TForm.Create(nil); 
 Fform.Caption := 'UserForm';
 Fform.Width := 800;
 Fform.Height := 800;
 Fform.Show;
  Fform.Left := Fx;
 Fform.Top := Fy;
 Fform.OnMouseMove:= MouseMove;
 Fform.OnMouseDown:= MouseDown;
 Fform.OnMouseUp:= MouseUp;
 Fform.GlassFrame.Enabled:= true;
 Fform.GlassFrame.SheetOfGlass:= true;
инициализация OpenGL
Код:
FGLE:=TGLEngine.Create;
FGLE.VisualInit(GetDC(Fform.Handle),Fform.ClientWidth,Fform.ClientHeight,0);
FGLE.LoadImage('aurora.png',impartf,true);
и вот собственно отрисовка
Код:
Fgle.BeginRender(false);
Fgle.Clear;
Fgle.SwichBlendMode(BMAdd);
fgle.DrawImage(x0,y0,40,40,10,true,false,impartf);
fgle.DrawImage(x,y,40,40,10,true,false,impartf);
Fgle.FinishRender;
вот процедуры самой библиотеки которые используются
Код:
procedure TGLEngine.VisualInit(dc: HDC; width, height: word;AntiAlias:integer);
var
 QW:int64;
 rc0:HGLRC;
begin
 GetPixelFormat(AntiAlias); 
 SetDCPixelFormat(DC);      
 rc0:=wglCreateContext(DC);           
 ActivateRenderingContext(DC, rc0);  

 dcvis:=dc;                           
 hrcvis:=rc0;                         
 //glDisable ( GL_SCISSOR_TEST);
  resize(width,height);               
 glEnable(GL_ALPHA_TEST);             
 glEnable(GL_BLEND);                  
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);   
 glShadeModel(GL_SMOOTH);             
 SetTextStyle('Courier New',12);      
 QueryPerformanceFrequency(QW);       
 ClockRate:=qw;                      
 QueryPerformanceCounter(TimeDraw);   
 DrawFrameCount:=0;                     
glGenFramebuffersEXT(1, @FrameBuffer);  
 toFrameBufer:=false;                    
 VBOSprite:=TVBOSprite.Create;          
end;

procedure TGLEngine.BeginRender(clear:boolean);
begin
 wglMakeCurrent(dcvis,hrcvis);
 if clear then
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 glLoadIdentity;
end;

procedure TGLEngine.DrawImage(x,y,w,h,Angle:single;Center,tile:boolean;Image:Cardinal);
begin
 glBindTexture(GL_TEXTURE_2D, Image);
 glEnable(GL_TEXTURE_2D);
 glPushMatrix();
  glTranslated(x,y,0);
  glRotatef(Angle, 0,0,1);
  DrawQuad(x,y,0, w,h,Center,tile);
 glPopMatrix();
 glDisable(GL_TEXTURE_2D);
end;


procedure TGLEngine.FinishRender;
begin
 VBOSprite.Draw;
 glFlush();
 swapBuffers(dcvis);
 wglMakeCurrent(0, 0);
end;
DJDrugsounD вне форума Ответить с цитированием
Старый 26.04.2014, 22:33   #4
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию

Я делал так: отрисовка в pbuffer, затем через glreadpixels читаем в hbitmap 32-bit (CreateDIBSection).
Выбираем этот битмеп в HDC (CreateCompatibleDC) и выводим на окно (BitBlt).
Медленно и нудно зато 100% будет нормально отрисовываться
troyan90 вне форума Ответить с цитированием
Старый 26.04.2014, 23:40   #5
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от troyan90 Посмотреть сообщение
Я делал так: отрисовка в pbuffer, затем через glreadpixels читаем в hbitmap 32-bit (CreateDIBSection).
Выбираем этот битмеп в HDC (CreateCompatibleDC) и выводим на окно (BitBlt).
Медленно и нудно зато 100% будет нормально отрисовываться
яж написал в первом посте что битпам отпадает) очень сильно нагибает проц такой способ.

мне просто интересно почему не у всех работает Aero Glass так как положено
DJDrugsounD вне форума Ответить с цитированием
Старый 27.04.2014, 01:10   #6
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию

Ограничить fps и процессор не будет грузиться.
troyan90 вне форума Ответить с цитированием
Старый 27.04.2014, 02:15   #7
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от troyan90 Посмотреть сообщение
Ограничить fps и процессор не будет грузиться.
если в fullHD это я даже не представляю какой нужен fps чтоб не грузился проц, fps так 10-15?

ладно, видимо половине пользователей придётся смирится с нагрузкой проца
DJDrugsounD вне форума Ответить с цитированием
Старый 27.04.2014, 10:51   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Windows Aero
Цитата:
Требования:
-требуется видеокарта (совместимая с DirectX 9, Pixel Shader 2.0, Vertex Shader 2.0;
-Windows Aero недоступно для версий Windows 7 Начальная (Starter) и Windows 7 Домашняя Базовая (Home Basic). В Windows Vista Home Basic Windows Aero ограничен в некоторых возможностях (отсутствуют 3D эффекты, прозрачность).
Недостатки:
Если система расходует слишком много ресурсов на Aero или/и если видеокарта или её драйверы старые, система автоматически меняет интерфейс на «Упрощённый/Базовый стиль» (также возможна принудительная замена при запуске определенного приложения.
Взято с Вики
Ну и от себя добавлю. Если видюха или дрова древние, DX не установлен, dll-ек для работы с aero нет. Это тоже возможные причины облома.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 27.04.2014, 13:57   #9
DJDrugsounD
Пользователь
 
Регистрация: 15.08.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Windows Aero

Ну и от себя добавлю. Если видюха или дрова древние, DX не установлен, dll-ек для работы с aero нет. Это тоже возможные причины облома.
ну так окна то почему то с Aero Glass и прозрачные, на скрине в первом посте видно
DJDrugsounD вне форума Ответить с цитированием
Старый 27.04.2014, 17:42   #10
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Я ж прочел все, что Вы написали в первом посте. Мой пост был предназначен для того, чтобы вы проверили 40% пользователей, у которых как на правой картинке.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows forms и aero glass SPKe Общие вопросы .NET 0 17.03.2013 23:46
Delphi XE и Aero = проблема SkOle Общие вопросы Delphi 3 28.12.2011 19:29
Эффекты формы Aero Show и Aero Hide SalasAndriy Общие вопросы Delphi 15 06.10.2010 12:49
Проблема с DWM Aero Ivan_32 Win Api 0 25.06.2009 22:06