Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 04.04.2010, 20:30   #1
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
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
(Offline)
 
Ответить с цитированием
Старый 04.04.2010, 20:50   #2
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: blitz3D + OpenGL

монсьер, к чему все эти извращения с опенджиэлом?
(Offline)
 
Ответить с цитированием
Эти 10 пользователя(ей) сказали Спасибо Hurrit за это полезное сообщение:
Android (04.04.2010), Arles (05.04.2010), Arton (06.04.2010), baton4ik (13.04.2010), cahekp (18.09.2010), Dream (04.04.2010), Nex (05.04.2010), Randomize (05.04.2010), Reizel (05.04.2010), Taugeshtu (04.04.2010)
Старый 04.04.2010, 20:57   #3
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
Re: Ответ: blitz3D + OpenGL

Сообщение от Hurrit Посмотреть сообщение
монсьер, к чему все эти извращения с опенджиэлом?
никаких ихвращений. в примере выше там кроме огл ещё и цг от нвидиа. но проблема пока именно в fullscreen режиме...
(Offline)
 
Ответить с цитированием
Старый 04.04.2010, 21:56   #4
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: blitz3D + OpenGL

да нет же, само использование опенджиэла в блиц3д, имхо, большое извращение, не лучше ли бмакс взять? он вроде бы для этого и предназначен
(Offline)
 
Ответить с цитированием
Старый 05.04.2010, 08:29   #5
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
Re: blitz3D + OpenGL

blitzmax для меня это пока шибко большой изврат, связанный с уклоном на ооп. а опенгл в данном случае, в б3д, используется напрямую, без всяких враперов. это уже холрошо и кроме того, язык от нвидиа - цг, тоже минуя враперы напрямую. лучше помогите процедуркой или алгоритмом каким, как переводить его в полноэкранный режим.
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 15:35   #6
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
Re: blitz3D + OpenGL

значит в итоге, вся работа по сути через апи винды, т.е. с контекстами и прочим хламом. однако при использовании полноэкранного режима, чёрный экран. точнее говоря, в хр работает, но не на всех компах почему то, на висте и семёрке на всех чёрный экран. если в пиксельформате выставить для cAlphaBits какое то значение, то работать на весь экран будет. но тогда без аппаратной подержки, очень тормозно а на некоторых компах ещё и с глюками.
всё таки, кто сталкивался с такой бедой? или все сидят чисто на блицмаксе? судя по местным постам, макс не шибко то восстребован...
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 16:59   #7
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: blitz3D + OpenGL

все сидят чисто на блицмаксе?
Все мучают чисто DirectX 7/9, а для OpenGL блиц не предназначен
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (21.04.2010)
Старый 21.04.2010, 20:13   #8
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
Re: blitz3D + OpenGL

Блиц предназначен для дх7...9й мимо или при помощи ксорса. если есть возможность юзать 9ку, значит и огл можна. примеров больше десятка лежит в архиве...проблема только в фуллскрин режиме...
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 20:42   #9
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: 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
Мне больше нравится второе, а тебе? Зачем опенГЛ под блиц тебе нужен?
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 21:08   #10
Sayman
Оператор ЭВМ
 
Регистрация: 26.11.2007
Сообщений: 39
Написано 9 полезных сообщений
(для 12 пользователей)
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);
вот это к делу не относится...
создали окно, нашли контекст, передали его в огл, сделали инициализаци, рисуем...а то что я выделил, это от нвидиа Цг и не является обязательным пунктом.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Sayman за это полезное сообщение:
Arton (21.04.2010), Reks888 (21.04.2010)
Старый 21.04.2010, 21:45   #11
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: blitz3D + OpenGL

А Xors к блицу тяжело подключить?! И шейдеры и проча есть (dx9). Или тебе OpenGL из интереса с блицем заюзать хочется?!
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 21:51   #12
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: blitz3D + OpenGL

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

З.Ы. на счёт Blitz Basic'a и OpenGL идея не очень хорошая. Лучше всё таки что то вроде Делфи или С++ использовать... ну а там как удобнее ))) когда то давно пробовал использовать OpenGL на блитце, но как то тогда не очень старался....
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (21.04.2010)
Старый 21.04.2010, 21:53   #13
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: blitz3D + OpenGL

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

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
Arton (21.04.2010), SBJoker (21.04.2010)
Старый 21.04.2010, 22:00   #14
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: blitz3D + OpenGL

Да ладно, ладно. Только спросил чела, так на меня налетели. Ну нехорошей мне связка blitz3D + OpenGL кажется, нехорошей. Блиц всё таки dx изначально, вот и нехорошо выглядит... На счёт того что Ксорс кривой не знаю, не знаю, не юзал, только вот человек жалуется что blitz3D + OpenGL не на всех компах работает и проча лабуда...
(Offline)
 
Ответить с цитированием
Старый 21.04.2010, 22:46   #15
jimon
 
Сообщений: n/a
Ответ: blitz3D + OpenGL

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

да и попробуй blitzmax, там с этим куда проще
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reks888 (21.04.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com