forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   blitz3D + OpenGL (http://forum.boolean.name/showthread.php?t=12334)

Sayman 04.04.2010 20:30

blitz3D + OpenGL
 
Всем доброго времени. Сижу вот ковыряюсь в сабже, да наткнулся на проблему. суть в том, что я не могу сообразить, как правильно переключать приложение, написанное с преминением OpenGL, в полноэкранный режим. пробовал покапать в сторону glut - облом - при вызове функции glutInit вылетает ошибка MAV. попробовал поработать с ChangeDisplaySettings, но тут ещё сильнее закопался. по сути то перед вызовом этой функции, нужно было бы вызвать EnumDisplayDevices с целью определения девайса и прочих парамтеров. но функция эта среди параметров содержит адрес на массив... т.е. то что на бллице видимо сложновато сделать... может есть какой то способ, кто может подсказать? пример приложения привожу..он старый, но нанём пока отрабатываю.
Код:

Include "ogld_utils.bb"
Include "wgl_const.bb"
Include "gl_const.bb"
Include "glu_const.bb"
Include "blitz_gl.bb"
Include "CG.bb"
Const title$="OpenGL Direct - selection mode and name stack"
Const GLUT_RGB=0
Const GLUT_DOUBLE=2
Const GLUT_DEPTH=16
Global hRC  ; The OpenGL RenderContext
Global hMainDC  ; render window's  Device context
Global  bbHwnd  ; Windows handle.
Global GlWinW=1280
Global GlWinH=720
Global xrot#
Global yrot#
Global xspeed# ;=.1
Global yspeed# ;=.2
; CG Vars to hold info
Global CGcontext,profile,vprogram
Global light,modelviewproj,modelviewit
Global teapotList
AppTitle title$
Global argc
Global argv
 
Graphics GlWinW,GlWinH,32,2
ChangeDisplaySettings(0,4)
AppTitle title$
frame=CreateTimer(60)
bbHwnd=ogld_GetWindow() ;
If bbHwnd Then
 pf.ogld_PixelFormat=ogld_MakeDefaultPixelFormat()
 hMainDC = ogld_SetUp_OpenGL(bbHwnd,pf)
 If Not hMainDC Then RuntimeError "Could not initialize OpenGl"
  ResizeViewport GlWinW, GlWinH
  initGL
 Else
  RuntimeError "Could not get a handle to the Blitz window"
EndIf
;glScissor 100,100,300,300
;glEnable GL_SCISSOR_TEST
While Not KeyHit(1)
WaitTimer(frame)
 DrawGLscene
 SwapBuffers(hMainDC )
 glerr= glGetError()
 If glerr<>0 Then DebugLog "OpenGL Error:  " + glerr
    xrot = xrot + xspeed
    yrot = yrot + yspeed 
Wend
FreeTimer(frame) 
wglMakeCurrent 0,0
If hMainDC Then
 wglDeleteContext hMainDC
End If 
If hMainDC Then
 ReleaseDC bbHwnd, hMainDC
End If     
End
Function DrawGLscene()
 glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT);  ; Clears the screen.
 glLoadIdentity();                  ;Reset modelview matrix for new frame.
 glMatrixMode(GL_MODELVIEW);
 glTranslatef(0,0,-10)
 glRotatef(xrot, 1.0, 0.0, 0.0);
 glRotatef( yrot, 0.0, 1.0, 0.0);
 ; Here we are binding the vertex shader To the hardware After you set the
 ; constants.
 
 ; Just like If you would like To have texture, you would need To enable texturing Right?
 ; Well To use the vertex program you must enable it like so...
 cgGLBindProgram(vprogram);
 cgGLEnableProfile(profile);
 cgGLSetParameter4f(light, 0.0, 0.0, 1.0, 1.0);
    cgGLSetStateMatrixParameter(modelviewproj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
    cgGLSetStateMatrixParameter(modelviewit, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);
 glPushMatrix();
   
 glBegin(GL_QUADS);
  ;Front Face
  glNormal3f( 0.0, 0.0, 1.0);
  glVertex3f(-1.0, -1.0,  1.0);
  glVertex3f( 1.0, -1.0,  1.0);
  glVertex3f( 1.0,  1.0,  1.0);
  glVertex3f(-1.0,  1.0,  1.0);
  ;Back Face
  glNormal3f( 0.0, 0.0,-1.0);
  glVertex3f(-1.0, -1.0, -1.0);
  glVertex3f(-1.0,  1.0, -1.0);
  glVertex3f( 1.0,  1.0, -1.0);
  glVertex3f( 1.0, -1.0, -1.0);
  ;Top Face
  glNormal3f( 0.0, 1.0, 0.0);
  glVertex3f(-1.0,  1.0, -1.0);
  glVertex3f(-1.0,  1.0,  1.0);
  glVertex3f( 1.0,  1.0,  1.0);
  glVertex3f( 1.0,  1.0, -1.0);
  ;Bottom Face;
  glNormal3f( 0.0,-1.0, 0.0);
  glVertex3f(-1.0, -1.0, -1.0);
  glVertex3f( 1.0, -1.0, -1.0);
  glVertex3f( 1.0, -1.0,  1.0);
  glVertex3f(-1.0, -1.0,  1.0);
  ;Right face
  glNormal3f( 1.0, 0.0, 0.0);
  glVertex3f( 1.0, -1.0, -1.0);
  glVertex3f( 1.0,  1.0, -1.0);
  glVertex3f( 1.0,  1.0,  1.0);
  glVertex3f( 1.0, -1.0,  1.0);
  ;Left Face
  glNormal3f(-1.0, 0.0, 0.0);
  glVertex3f(-1.0, -1.0, -1.0);
  glVertex3f(-1.0, -1.0,  1.0);
  glVertex3f(-1.0,  1.0,  1.0);
  glVertex3f(-1.0,  1.0, -1.0);
 glEnd();
 glPopMatrix()
 cgGLDisableProfile(vProfile);
    ;When we are done we disable the vertex program.
xrot=xrot+.5
yrot=yrot+.5
End Function
Function CGERROR()
cgerror=cgGetError( )
If cgerror>0
DebugLog cgGetErrorString(cgerror )
EndIf
End Function

Function ResizeViewport(nWidth,nHeight)
 Local aspect#
 If nHeight = 0 Then nHeight = 1
 glViewport 0,0,nWidth,nHeight
 glMatrixMode GL_PROJECTION
 glLoadIdentity
 aspect#=Float(nWidth)/Float(nHeight)
 gluPerspective 55.0,aspect,1.0,100.0
 glMatrixMode GL_MODELVIEW   
End Function
Function initGL()
 glClearColor (0.0, 0.0, 0.0, 0.5);        ; Black Background
 glClearDepth (1.0);            ; Depth Buffer Setup
 glDepthFunc (GL_LEQUAL);          ; The Type Of Depth Testing
 glEnable (GL_DEPTH_TEST);          ; Enable Depth Testing
 glShadeModel (GL_SMOOTH);          ; Select Smooth Shading
 glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);    ; Set Perspective Calculations To Most Accurate
 
 ; Now we take that source code And create the vertex shader out of it.
 ;cgIsProgram(program)
 If (cgGLIsProfileSupported(CG_PROFILE_ARBVP1))
  profile = CG_PROFILE_ARBVP1;
 Else If (cgGLIsProfileSupported(CG_PROFILE_VS_2_0))
      profile = CG_PROFILE_VP20;
  Else
        RuntimeError("Vertex programming extensions (GL_ARB_vertex_program or GL_NV_vertex_program) Not supported, exiting...")
 EndIf
 CGcontext = cgCreateContext();
 
 vprogram = cgCreateProgramFromFile(CGcontext,CG_SOURCE, "simple.cg",profile, 0,0);
 cgGLLoadProgram(vprogram);
   
    Light = cgGetNamedParameter(vProgram, "LightVec");
    ModelViewProj = cgGetNamedParameter(vProgram, "ModelViewProj");
    modelviewit = cgGetNamedParameter(vprogram, "ModelViewIT");
 
End Function
 
Type ogld_PixelFormat
 Field index%
 Field Size%
 Field Version%
 Field Flags%
 Field PixelType%
 Field ColorBits%
 Field RedBits%
 Field RedShift%
 Field GreenBits%
 Field GreenShift%
 Field BlueBits%
 Field BlueShift%
 Field AlphaBits%
 Field AlphaShift%
 Field AccumBits%
 Field AccumRedBits%
 Field AccumGreenBits%
 Field AccumBlueBits%
 Field AccumAlphaBits%
 Field DepthBits%
 Field StencilBits%
 Field AuxBuffers%
 Field LayerType%
 Field Reserved%
 Field wLayerMask%
 Field wVisibleMask%
 Field wDamageMask%
End Type
 
Function ogld_MakeDefaultPixelFormat.ogld_PixelFormat()
 pf.ogld_PixelFormat=New ogld_PixelFormat
 pf\Size=40
 pf\Version=2
 pf\Flags=PFD_SUPPORT_OPENGL Or PFD_DRAW_TO_WINDOW Or PFD_DOUBLEBUFFER
 pf\PixelType=PFD_TYPE_RGBA
 pf\ColorBits=32
 ;pf\RedBits=
 ;pf\RedShift=
 ;pf\GreenBits=
 ;pf\GreenShift=
 ;pf\BlueBits=
 ;pf\BlueShift=
 pf\AlphaBits=16
 ;pf\AlphaShift=
 ;pf\AccumBits=
 ;pf\AccumRedBits=
 ;pf\AccumGreenBits=
 ;pf\AccumBlueBits=
 pf\AccumAlphaBits=16
 pf\DepthBits=16
 pf\StencilBits=8
 ;pf\AuxBuffers=
 ;pf\LayerType=
 ;pf\Reserved=
 pf\wLayerMask=PFD_MAIN_PLANE
 ;pf\wVisibleMask=
 ;pf\wDamageMask=
 Return pf
End Function
 
Function ogld_SetUp_OpenGL(hWnd,pf.ogld_PixelFormat)
 hDC=GetDC(hWnd)
 
 If hDC Then
  lpPixelFormat=ogld_SetupPixelFormat(hDC,pf)
 
    hRC = wglCreateContext(hDC)
    If Not hRC Then
      RuntimeError  "wglCreateContext() failed"
    End If
    wglMakeCurrent hDC, hRC 
 
 
  Return hDC
 
 Else
  RuntimeError "Can't get DC"
 EndIf
End Function


Hurrit 04.04.2010 20:50

Ответ: blitz3D + OpenGL
 
монсьер, к чему все эти извращения с опенджиэлом?

Sayman 04.04.2010 20:57

Re: Ответ: blitz3D + OpenGL
 
Цитата:

Сообщение от Hurrit (Сообщение 144120)
монсьер, к чему все эти извращения с опенджиэлом?

никаких ихвращений. в примере выше там кроме огл ещё и цг от нвидиа. но проблема пока именно в fullscreen режиме...

Hurrit 04.04.2010 21:56

Ответ: blitz3D + OpenGL
 
да нет же, само использование опенджиэла в блиц3д, имхо, большое извращение, не лучше ли бмакс взять? он вроде бы для этого и предназначен

Sayman 05.04.2010 08:29

Re: blitz3D + OpenGL
 
blitzmax для меня это пока шибко большой изврат, связанный с уклоном на ооп. а опенгл в данном случае, в б3д, используется напрямую, без всяких враперов. это уже холрошо и кроме того, язык от нвидиа - цг, тоже минуя враперы напрямую. лучше помогите процедуркой или алгоритмом каким, как переводить его в полноэкранный режим.

Sayman 21.04.2010 15:35

Re: blitz3D + OpenGL
 
значит в итоге, вся работа по сути через апи винды, т.е. с контекстами и прочим хламом. однако при использовании полноэкранного режима, чёрный экран. точнее говоря, в хр работает, но не на всех компах почему то, на висте и семёрке на всех чёрный экран. если в пиксельформате выставить для cAlphaBits какое то значение, то работать на весь экран будет. но тогда без аппаратной подержки, очень тормозно а на некоторых компах ещё и с глюками.
всё таки, кто сталкивался с такой бедой? или все сидят чисто на блицмаксе? судя по местным постам, макс не шибко то восстребован...

Reks888 21.04.2010 16:59

Ответ: blitz3D + OpenGL
 
Цитата:

все сидят чисто на блицмаксе?
Все мучают чисто DirectX 7/9, а для OpenGL блиц не предназначен

Sayman 21.04.2010 20:13

Re: blitz3D + OpenGL
 
Блиц предназначен для дх7...9й мимо или при помощи ксорса. если есть возможность юзать 9ку, значит и огл можна. примеров больше десятка лежит в архиве...проблема только в фуллскрин режиме...

Reks888 21.04.2010 20:42

Ответ: blitz3D + OpenGL
 
Я конечно понимаю, но это..
Цитата:

cgGLBindProgram(vprogram);
cgGLEnableProfile(profile);
cgGLSetParameter4f(light, 0.0, 0.0, 1.0, 1.0);
cgGLSetStateMatrixParameter(modelviewproj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
cgGLSetStateMatrixParameter(modelviewit, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);
glPushMatrix();

glBegin(GL_QUADS);
;Front Face
glNormal3f( 0.0, 0.0, 1.0);
glVertex3f(-1.0, -1.0, 1.0);
glVertex3f( 1.0, -1.0, 1.0);
glVertex3f( 1.0, 1.0, 1.0);
glVertex3f(-1.0, 1.0, 1.0);
;Back Face
glNormal3f( 0.0, 0.0,-1.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f( 1.0, 1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);
;Top Face
glNormal3f( 0.0, 1.0, 0.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f(-1.0, 1.0, 1.0);
glVertex3f( 1.0, 1.0, 1.0);
glVertex3f( 1.0, 1.0, -1.0);
;Bottom Face;
glNormal3f( 0.0,-1.0, 0.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);
glVertex3f( 1.0, -1.0, 1.0);
glVertex3f(-1.0, -1.0, 1.0);
;Right face
glNormal3f( 1.0, 0.0, 0.0);
glVertex3f( 1.0, -1.0, -1.0);
glVertex3f( 1.0, 1.0, -1.0);
glVertex3f( 1.0, 1.0, 1.0);
glVertex3f( 1.0, -1.0, 1.0);
;Left Face
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, -1.0, 1.0);
glVertex3f(-1.0, 1.0, 1.0);
glVertex3f(-1.0, 1.0, -1.0);
glEnd();
glPopMatrix()
cgGLDisableProfile(vProfile);
и это:
Цитата:

img=LoadTexture("tex.png")
cube=CreateCube()
EntityTexture cube, img
Мне больше нравится второе, а тебе? Зачем опенГЛ под блиц тебе нужен?

Sayman 21.04.2010 21:08

Re: blitz3D + OpenGL
 
мне больше нра первый вариант, потому, что:
1. есть доступ к шейдерам, включая последние, а не только 2.0 из кривущего ксорса (да ещё и платного).
2. нет потребности во враперах, т.к. доступ к большинству функций, по сути, напрямую (opengl32.dll через файл деклс).
3. огл это бесплатный и кросс платформеный двиг (хотя это в данном случае не так важно).
4. контролируеш любуюю модель с точностью до вертекса. процедура погрузки моделей можно наваять свою под любой доступный и известный формат...
но это правда и к минусам относица, т.к. сваять просутю тестовую модель потом проблема сходу её погрузить...
ну и проблема с экраном. этот вопрос нужно решить. в целом, через библиотеку SDL работает нормально, но использовать сдл пока не желаю... хотя несколько функций я перекинул уже...без враперов...
собственно по теме шейдеров - даже без нвидиа ЦГ, я пробовал инициализировать glsl, пока ошибок и вылетов небыло...встал чисто изза фуллскрина..
а на макса я переходить не буду изза ООП...да и вобще по многим форумам, макс спросом не пользуется....
Цитата:

cgGLBindProgram(vprogram);
cgGLEnableProfile(profile);
cgGLSetParameter4f(light, 0.0, 0.0, 1.0, 1.0);
cgGLSetStateMatrixParameter(modelviewproj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
cgGLSetStateMatrixParameter(modelviewit, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);
вот это к делу не относится...
создали окно, нашли контекст, передали его в огл, сделали инициализаци, рисуем...а то что я выделил, это от нвидиа Цг и не является обязательным пунктом.

Arton 21.04.2010 21:45

Ответ: blitz3D + OpenGL
 
А Xors к блицу тяжело подключить?! И шейдеры и проча есть (dx9). Или тебе OpenGL из интереса с блицем заюзать хочется?! :4to:

St_AnGer 21.04.2010 21:51

Ответ: blitz3D + OpenGL
 
Цитата:

Сообщение от Arton (Сообщение 145221)
А Xors к блицу тяжело подключить?! И шейдеры и проча есть (dx9). Или тебе OpenGL из интереса с блицем заюзать хочется?! :4to:

Помоему автор явно указал почему не хочет использовать Xors3d и почему хочет пользоваться OpenGL.

З.Ы. на счёт Blitz Basic'a и OpenGL идея не очень хорошая. Лучше всё таки что то вроде Делфи или С++ использовать... ну а там как удобнее ))) когда то давно пробовал использовать OpenGL на блитце, но как то тогда не очень старался....

.Squid 21.04.2010 21:53

Ответ: blitz3D + OpenGL
 
Цитата:

Сообщение от Arton (Сообщение 145221)
А Xors к блицу тяжело подключить?! И шейдеры и проча есть (dx9).

Ты тупой!!!!!!!!! Ксорс кривущий и шейдеры только 2.0!!!!!!!!!!!!

Arton 21.04.2010 22:00

Ответ: blitz3D + OpenGL
 
Да ладно, ладно. Только спросил чела, так на меня налетели. Ну нехорошей мне связка blitz3D + OpenGL кажется, нехорошей. Блиц всё таки dx изначально, вот и нехорошо выглядит... На счёт того что Ксорс кривой не знаю, не знаю, не юзал, только вот человек жалуется что blitz3D + OpenGL не на всех компах работает и проча лабуда...

jimon 21.04.2010 22:46

Ответ: blitz3D + OpenGL
 
Sayman
используй C++, потому что скорость выполнения команд на блице очень медленная, если без блица ну совсем никуда - делай dll'ку, а OGL это не движок

да и попробуй blitzmax, там с этим куда проще

Reks888 21.04.2010 23:01

Ответ: blitz3D + OpenGL
 
А если не нравится ООП, то тут благодаря синтаксису блица не умрешь. блиц позволяет сделать через жопу все что угодно :-)(дык можно и без методов обойтись)

SBJoker 22.04.2010 00:20

Ответ: blitz3D + OpenGL
 
В бмаксе для олдфагов есть модуль brl.retro который позволяет кодить как в блитз3д.

Sayman 22.04.2010 07:35

Re: blitz3D + OpenGL
 
Blitz3D мне нравится, я давно с ним работаю. в том числе я на нём делаю для себя всякие конвертелки под спектрум, гляделки и прочее. но тут задумался над чем то более крупным чем прочсто конвертилка спрайтов. дх7 я уже пробовал..как то не вдохновился. а на огл всё таки, работа на более низком уровне. да и кстати да, интересно заюзать блиц + огл. я знаю что у блица тормозная арифметика, ничего страшного, некоторые пишут на си++ и прочих языках, а результат ещё тормознее, чем блиц. ооп я не люблю, а на максе, какой бы не использовал мод, ооп он и есть ооп. по поводу что не везде работает - на данный момент пока не нашол решение проблемы с фуллскрином, в окне работает на всех машинах! например, результаты таких каманд как glGetString, возвращают текущие параметры, например вендора, версия и рендер... пробовал по одной из док сделать определение возвожности заюзать glsl, отработал без труда, все функции вернули положительный результат. нвидиа цг так же определяет вероятность использования шейдеров. но шейдеры сейчас не самое важное, важно заставить пахать на весь экран. продолжаю курить, вроде выход есть, сёдня набросаю процедурку на си, посмотрим что будет...

Sayman 22.04.2010 13:28

Re: blitz3D + OpenGL
 
Вложений: 1
Собственно говоря решение проблемы частично нашол. результат прикрепляю (пример работы с CG, там самый простейший шейдер).

St_AnGer 22.04.2010 14:05

Ответ: blitz3D + OpenGL
 
Скачал, запустил. Сразу выдало MAV. Не найдена библиотека. До вылетания ошибки приложение запускается не на весь экран и в формате 16:9 с разрешением 1280х720. Библиотеки подсунуть к приложению перепробовал все нашедшиеся в моей коллекции (OpenGL32.dll, OpenGL.dll, glut32.dll и его же переименовав в OpenGL.dll). Всё равно Userlib not found.

Sayman 22.04.2010 15:39

Re: blitz3D + OpenGL
 
хххммм...и действительно, всё упёрлось во врапер оной единственной функции wrapChangeDisplaySettings, которую набросал на си. при обращении к функции, не находит файл..странно, но файл есть. проверял на нескольких компах в канторе. странное дело....
код врапа:
Код:

#include"string.h"
#include"stdlib.h"
#include"stdio.h"
#include"windows.h"
#include"gl/gl.h"

//#pragmacomment (lib,"opengl32.lib")
 
#define BBDECL extern"C"_declspec(dllexport)
#define BBCALL _stdcall

BBDECL int BBCALL wrapChangeDisplaySettings(int flags, int width, int height, char bpp, int mode, char freq)
{
int err;
DEVMODE dmScreenSettings;
memset(&dmScreenSettings, 0, sizeof(DEVMODE));
dmScreenSettings.dmSize = sizeof(DEVMODE);
dmScreenSettings.dmBitsPerPel = bpp;
dmScreenSettings.dmPelsWidth = width;
dmScreenSettings.dmPelsHeight = height;
dmScreenSettings.dmFields = flags;
dmScreenSettings.dmDisplayFrequency = freq;
 
err=ChangeDisplaySettings(&dmScreenSettings, mode);
return err;
}

функцию вызываю обычным способом:
wrapChangeDisplaySettings(DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL Or DM_DISPLAYFREQUENCY, GlWinW,GlWinH,32,CFD_FULLSCREEN, 0)
может чтото не так ещё делаю? хм...

.Squid 22.04.2010 16:24

Ответ: blitz3D + OpenGL
 
Да твоя поделка такая же кривущая, как и ксорс. Одно гавно вокруг (

Sayman 22.04.2010 16:34

Re: blitz3D + OpenGL
 
Squid, OpenGL не моя поделка если что)))
с другой стороны - умееш лучше - покажи класс!

.Squid 22.04.2010 17:41

Ответ: blitz3D + OpenGL
 
Я тоже кривущей херней занимаюсь.

Arton 22.04.2010 17:53

Ответ: blitz3D + OpenGL
 
"User lib not found" выдаёт. Может ему нужен .decls?

Sayman 23.04.2010 14:48

Re: blitz3D + OpenGL
 
ошибку выдаёт, потому что я забыл в архив положить две либы ещё - CG.DLL и CGGL.DLL
однако проблема теперь не изза этого. проверил на нескольких компах в канторе, всёровно не видит, не желает находить библиотеку wrap.dll. почему не могу понять. на моём компе и дома всё чётко. пробую избавица от враперов путём исплользования апи винды. нахрапом взять не получается. вся проблема в том. что посути надо делать там свой обработчик, функция типа WndProc долждна быть, её адрес передовать в класс окна. по этому адресу потом винда делает вызов нашего обработчика. вот тут и проблема - блиц не желает передовать в чистом виде адреса функций. был вариант использовать FastPointer, однако там тоже такая же проблема - передача адреса функции блица в Апи винды вызывает вечный цикл при выходе, переполнение стэка и как следствие - MAV...
ищу пути решения.

Arton 23.04.2010 17:18

Ответ: blitz3D + OpenGL
 
Так может для wrap.dll нужен wrap.decls? Да и для остальных либ. Ты ж с блицем работаешь...

Sayman 23.04.2010 17:21

Re: blitz3D + OpenGL
 
файл деклс требуется только на момент разработки. после компиляции его можно выкинуть! т.е. он не требуется бинарнику.

Arton 23.04.2010 17:39

Ответ: blitz3D + OpenGL
 
Честно говоря не знал... Хм, а ведь мог бы догадаться...

Sayman 27.04.2010 08:31

Re: blitz3D + OpenGL
 
ну и что? у каво есть какие соображения по теме фуллскрина? сейчас проблема вот в чём:
включается фуллскрин, но к сожалению любое аськоно окошко или какое-нить оповещение или другое всплывающее окно, сразу становица поверх нашего окна, т.е. чужое окно временно видно на нашем. это не гут. в АПИ венды ест ь такая штука, WM_KILLFOCUS, в обработчике окна. но тут тоже проблема. на блице его написать можно, но передать в апи венды нереально. на си написать тоже смутно, т.к. хз в чм дело, дома работает, а на работе нет, да и перехватывает этот сишный обработчик все события. т.е. если мы пишем на блице условие типа if keydown(key) то оно уже не будет отработано в этом случае. думаю вот, может можно как то сделать средставми блица "потерю" и возврат фокуса окна? т.е. тут надо отработать такие манипуляции как кнопка вин, или альт таб, вин таб, контрол шифт эскейп и подобные.

Randomize 27.04.2010 08:57

Ответ: blitz3D + OpenGL
 
Какой то вы тут хренью если честно занимаетесь. Влияние весны?

Sayman 27.04.2010 09:06

Re: blitz3D + OpenGL
 
твои предложения? что по твойму не хрень?

Randomize 27.04.2010 09:19

Ответ: blitz3D + OpenGL
 
Поставить Code::Blocks и игратся с глутом на здоровье.
Отстаньте уже от блица. OpenGL к блицу это уже черезчур!
Производительности не будет.
OpenGL под Windows вобще жизни нет.
Смысл ваших действий какой?

St_AnGer 27.04.2010 09:20

Ответ: blitz3D + OpenGL
 
Ну почему фигнёй... мне вот очень интересна связка OpenGL + Blitz3d. Когда то сам увлекался этой мыслью, но потом решил просто перейти на С++. Не хватило усидчивости )))


и зачем Code::Blocks? Ставь тогда уж полноценную сишку и работай с чем твоей душе угодно. Тут человек пытается что то полезное из блица выжать, за что ему благодарность большая.

Randomize 27.04.2010 09:23

Ответ: blitz3D + OpenGL
 
Если так хочется и бейсик и OpenGL то юзайте GLBasic

Sayman 27.04.2010 09:41

Re: blitz3D + OpenGL
 
GLBasic умер давно. в своё время успел стянуть библиотеки, а щас он на семёрке тупо зависает. ОГЛ в любом случае на блице работает, но работает 100% пока тока в окне и без врапов всяких. а у меня цель - заставить пахать на фуллскрине. фуллскрин работает, но проблему изложил выше. глут с блицем не будет работать изза двух глутовых функций - glutDisplayFunc и glutReshapeFunc, потому как они в качестве параметра берут адреса соответствующих функций. блиц не умеет передавать адреса своих функций в апи венды. использование сторонних либ, типа fastpointer даёт тот же результат - переполнение стэка...
мучаться с SDL желания нет совершенно. тем более что там обработчик клавиатуры сделан по типу заполнения буфера (очерёдность событий). меня это не устраивает...

baton4ik 27.04.2010 19:18

Ответ: Re: blitz3D + OpenGL
 
Цитата:

Сообщение от Sayman (Сообщение 145592)
ну и что? у каво есть какие соображения по теме фуллскрина? сейчас проблема вот в чём:
включается фуллскрин, но к сожалению любое аськоно окошко или какое-нить оповещение или другое всплывающее окно, сразу становица поверх нашего окна, т.е. чужое окно временно видно на нашем. это не гут. в АПИ венды ест ь такая штука, WM_KILLFOCUS, в обработчике окна. но тут тоже проблема. на блице его написать можно, но передать в апи венды нереально. на си написать тоже смутно, т.к. хз в чм дело, дома работает, а на работе нет, да и перехватывает этот сишный обработчик все события. т.е. если мы пишем на блице условие типа if keydown(key) то оно уже не будет отработано в этом случае. думаю вот, может можно как то сделать средставми блица "потерю" и возврат фокуса окна? т.е. тут надо отработать такие манипуляции как кнопка вин, или альт таб, вин таб, контрол шифт эскейп и подобные.

хм... А это так принципиально? В большинстве игр нет такой жосткой фокусировки, любая аська, скайп и довнлоад мастер выскакивают поп-апами и ничего. Зато я знаю несколько игр, где это заблокировано. Так вот, там на равне с этим не высвечивается и не работает окно альт-таба, диспетчер задач... И если игра зависнет, то поможет только резет. Оно тебе надо? ;)

Sayman 27.04.2010 20:02

Re: blitz3D + OpenGL
 
ничего подобного, всё как раз с точностью наоборот. и в большинстве игр табуляция работает, или же три заветных кнопки = диспетчер задач. а вот чтобы где то аська бегала поверх игрухи..я лично не припомню , особенно из последних игр.

Hurrit 29.04.2010 20:11

Ответ: blitz3D + OpenGL
 
к примеру в FIFA 10, правда насчет аськи не знаю, но мэил поверх неё выходит

Sayman 30.04.2010 09:50

Re: blitz3D + OpenGL
 
а вот в Pro Evolution Soccer такого нет...

SBJoker 30.04.2010 10:40

Ответ: Re: blitz3D + OpenGL
 
Цитата:

Сообщение от Sayman (Сообщение 145592)
в АПИ венды ест ь такая штука, WM_KILLFOCUS, в обработчике окна. но тут тоже проблема. на блице его написать можно, но передать в апи венды нереально.

Эм, почему это нереально? Кто или что вам в этом помешает скажите на милость?

Sayman 05.05.2010 20:55

Re: blitz3D + OpenGL
 
Собственно, сам блиц и помешает. у него рамсы большие с передачей адреса функции в апи венды и последующим возвратом. переполнение стека у него. об этом говорится в библиотеке fastpointer. ведь wndproc это функция обработчик окна..события. её адрес нужно передать, например или в классе окна или в SetWindowLong с параметром GWL_WNDPROC и далее имя функции.

Morganolla 05.05.2010 23:15

Ответ: blitz3D + OpenGL
 
Под ОпенГЛ рулит Фрибесик (freebasic)! Идите туда (go there). Не хрена здесь мозги пудрить!

Sayman 11.06.2010 08:43

Re: blitz3D + OpenGL
 
Цитата:

Под ОпенГЛ рулит Фрибесик (freebasic)!
не нужно нам никаких фрибейсиков. есть пурик....но у меня цель - огл + блиц. ну чтож. заставил я его таки его же средствами скрывать всю хрень под собой. режим фуллскрин теперь работает как надо. никаких левых всплывающих окон теперь нет. более того, средствами блица ещё и обработчик окна сделал, на предмет определения фокуса окна. если фокус с окна снят (нажали на кнопку win или табуляция буда), смена разрешения теперь в изначальное, которое на рабочем столе. всё ништяг чуваки)))

Sayman 18.06.2010 16:16

Re: blitz3D + OpenGL
 
Вложений: 1
так так...работу с окошками я разобрал таки. средстави блица смог добица даже фокуса окна (снятие фокуса - возвращает прошлое разрешение и выпад на десктоп). однако переключение в реальном вреними с окна на фуллскрин приводит к ошибке..пока вопрос решаем, хотя не критично. поверх нашего окна мусор бьольше не показывается. я пробежался уже даже дальше и перешол к расширениям ARB. в качестве примера, очень простого, выкладываю архивчик, потестируйте плиз. пока минималка опенГЛ 2.0 (хотя для АРБ минимум 1.5). проверял я работу на двух разных машинах с разными видяхами - работает. носистема на обоих была винда 7. потестите у себя на своих компах.
состав архива:
ogl_3_3_2.exe - сам пример
ogl_aniso1.bmp - текстура
ogl_glslang_anisotropic_lighting.vert - glsl шейдер
wrap.dll - а это сам врапер для некоторых функций ОГЛа (которые средствами блица нельзя использовать...позже если что объясню).

baton4ik 18.06.2010 16:25

Ответ: blitz3D + OpenGL
 
loadlibrary with error 126: не найден указанный модуль
Но это, наверно, не из-за твоего примера, а из-за моих дров (в опен-гл играх тоже такое). Тут я даже не знаю, что поделать. Это у меня после обновления дров случилось. Поставил самые новые и опен-гл приложения перестали запускаться (у меня радеон). Нагуглил, что это проблема последних дров, сейчас буду инсталлить более старые.

Sayman 18.06.2010 16:28

Re: blitz3D + OpenGL
 
на работе у меня тоже радеон HD4800 series (хз какая точно, пока не смарел, на этот комп не давно сел). но дрова тут явно не 10й серии...
откати дрова на версию или две назад..на последние стабильные и не ставь беты...

baton4ik 18.06.2010 16:58

Ответ: blitz3D + OpenGL
 
Всё, дрова переустановил, теперь мав

Sayman 18.06.2010 17:06

Re: blitz3D + OpenGL
 
так я и знал(((( чё за фигня. почему то при компиляции в редакторе всё робит, но экзешник почему то на некоторых компах глючит...блин...
---
щас проверил ещё на одном компе, тоже с рабеоном, коре квадом, тока винда хр стоит...никаких ошибок.
все файлы из архива должны быть в одном месте..в одной папке.

baton4ik 18.06.2010 17:21

Ответ: Re: blitz3D + OpenGL
 
Цитата:

Сообщение от Sayman (Сообщение 150555)
так я и знал(((( чё за фигня. почему то при компиляции в редакторе всё робит, но экзешник почему то на некоторых компах глючит...блин...
---
щас проверил ещё на одном компе, тоже с рабеоном, коре квадом, тока винда хр стоит...никаких ошибок.
все файлы из архива должны быть в одном месте..в одной папке.

Ну, разумеется! :) Сейчас ещё один фикс совершу, пошаманю над опенгл-дровами и попробую ещё раз

baton4ik 18.06.2010 17:38

Ответ: blitz3D + OpenGL
 
Всё работает, чайничек крутится.

St_AnGer 18.06.2010 18:09

Ответ: blitz3D + OpenGL
 
Sayman, всё работает. чайник крутится :) только при выходе что то зависло всё наглухо. Конфиг моего компа в подписи, ОС - Windows 7 Maximal x86.

З.Ы. после выключения через диспетчер задач приложение самопроизвольно добавилось на панель быстрого запуска :)

Sayman 18.06.2010 18:18

Re: blitz3D + OpenGL
 
функция выхода ещё не до конца дописана...просто пока работал до расширений, всё было чётко. щас добавились расширения и бинды к шейдерным объектам. при выходе нужно добавить удаление объектов. я этого пока не делал, но доделаю.
а так в принципе ситуация такова:
функции расширений OpenGL работают по принципу goFar, т.е. нужно получить адрес нужной функции и потом передавать уже параметры. такое на блице не сделать и я ваяю врапер на си. пример:
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)wglGetProcAddress("glCreateShaderObjectARB");
GLhandle gl_VertexShader_objectARB = glCreateShaderObjectARB(GLenum shaderType);
функция wglGetProcAddress служит для получения адреса удалённой функции и далее мы делаем выхов функции с параметрами (или без них). в приведённом примере создаётс шейдерный объект согласно входящему параметру. функция возвращает дескриптор (хэндл) объекта.
соответствено такие манипуляции для блица не доступны( ну и ладно. зато большая часть других функци, включая winAPI доступны. но только до тех пор, пока не требуется передача адреса нашей функции или не требуется тип данных double...вот тут и начнёца геморой. а пока до этого не дошол, будем считать что я ваяю конкурента Ксорсу и причём бесплатный;)

Цитата:

З.Ы. после выключения через диспетчер задач приложение самопроизвольно добавилось на панель быстрого запуска
это уже либо ты схалтурил, либо в венде косяк какой то..у меня за всю мою карьеру админа, такой ситуации небыло...даже с блицем:D


baton4ik 18.06.2010 20:04

Ответ: blitz3D + OpenGL
 
Ну, у меня нормально вышло. Windows 7 Ultimate x86

St_AnGer 18.06.2010 21:47

Ответ: Re: blitz3D + OpenGL
 
Цитата:

Сообщение от Sayman (Сообщение 150568)
...а пока до этого не дошол, будем считать что я ваяю конкурента Ксорсу и причём бесплатный;)

Посмотрим что выйдет ;) меня лично OpenGL куда больше устраивает, чем DirectX :)

Sayman 18.06.2010 21:52

Re: blitz3D + OpenGL
 
а ты же с блица на си перешол вроде? ;)

St_AnGer 18.06.2010 22:11

Ответ: blitz3D + OpenGL
 
Перешёл :) и там начинаю изучать OpenGL :) но идея "OpenGL для блица" очень интересна, так как вездесущий директ уже в печени как яд засел... надо его выводить :) да и с блица я не совсем ушёл, иногда балуюсь захожу :)

Arton 19.06.2010 00:36

Ответ: Re: blitz3D + OpenGL
 
Цитата:

Сообщение от St_AnGer (Сообщение 150573)
...меня лично OpenGL куда больше устраивает, чем DirectX :)

Еретик!!! :lol:

Sayman 22.06.2010 21:35

Re: blitz3D + OpenGL
 
Вложений: 1
Если честно, незнаю, блиц вообще нынче кому то ещё интересен, особенно в связке с огл. но как бы там небыло, прогресс не стоит на месте. кое что у врапера переписал, кое что среди функций созданные средствами блица, тоже оптимизировал. результат выкладываю...
содержимое архива:
fragment_shader.frag - фрагментный щейдер
vertex_shader.vert - вертексный....
wood17.bmp - текстура
stones_normal.bmp - карта нормалей
wrap.dll - врапер
bgl_glsl__bumpmap_1.exe - ну и бинарник...
управление источником света - стрелки по координатам x и y, кнопки w и s по координате z. выход стандартный - эскейп.

St_AnGer 22.06.2010 21:50

Ответ: blitz3D + OpenGL
 
Ну если одному-двоим интересен - твой труд ненапрасен. Всё работает, красиво.

HolyDel 22.06.2010 21:55

Ответ: blitz3D + OpenGL
 
WinXP, Celerone 2.6, Ati Radeon 9550 - полет нормальный.

minus 23.06.2010 13:44

Ответ: blitz3D + OpenGL
 
XP,athlon x2 3800,Ati x1800 - ошибок нет

Это полезный и нужный труд.

Sayman 25.06.2010 20:14

Re: blitz3D + OpenGL
 
кстати говоря, спешу малость обломить тех, кто надеется на работоспособность штатных средств вывода у блица. при работе с BlizGL - все функции типа print, text, cls, flip, backbuffer, renderworld и т.д., не будут работать. если нужно чтото рендерить, придётся пользоваться тем, что предоставляет gAPI OpenGL. стандартный набор языка, типа логики if then else while, математики, работа с потоками (файлами), системные функции, всякие типы, банки и т.д. - будут доступны и работать. исключение состовляет пока что погрузка текстур (точнее LoadImage и сопутствующие команды, в том числе lockbuffer, readpixel(fast) т.д.). потому, если это не страшно и думаете потом пробовать свои силы, учите opengl.

Knightmare 26.06.2010 15:50

Ответ: blitz3D + OpenGL
 
Смысл в библиотеке реализующей чистый OGL функционал? Особенно учитывая невероятную скорость работы логики B3D. Если уж так приперло, есть BMax, и тебе OGL из коробки, и допилить легко, и кросс-платформенность.


Часовой пояс GMT +4, время: 03:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot