Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7818cbda
Commit
7818cbda
authored
Aug 09, 2007
by
Roderick Colenbrander
Committed by
Alexandre Julliard
Aug 10, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Add better pixelformat selection code for pbuffers.
parent
0c4c1985
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
1 deletion
+51
-1
context.c
dlls/wined3d/context.c
+51
-1
No files found.
dlls/wined3d/context.c
View file @
7818cbda
...
...
@@ -132,7 +132,57 @@ WineD3DContext *CreateContext(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *tar
if
(
create_pbuffer
)
{
HDC
hdc_parent
=
GetDC
(
win_handle
);
int
iPixelFormat
=
1
;
/* We only have a single useful format in Wine's OpenGL32, so use this for now. It should be fixed. */
int
iPixelFormat
=
0
;
short
red
,
green
,
blue
,
alphaBits
,
colorBits
;
short
depthBits
,
stencilBits
;
IWineD3DSurface
*
StencilSurface
=
This
->
stencilBufferTarget
;
WINED3DFORMAT
StencilBufferFormat
=
(
NULL
!=
StencilSurface
)
?
((
IWineD3DSurfaceImpl
*
)
StencilSurface
)
->
resource
.
format
:
0
;
int
attribs
[
256
];
int
nAttribs
=
0
;
unsigned
int
nFormats
;
#define PUSH1(att) attribs[nAttribs++] = (att);
#define PUSH2(att,value) attribs[nAttribs++] = (att); attribs[nAttribs++] = (value);
/* Retrieve the specifications for the pixelformat from the backbuffer / stencilbuffer */
getColorBits
(
target
->
resource
.
format
,
&
red
,
&
green
,
&
blue
,
&
alphaBits
,
&
colorBits
);
getDepthStencilBits
(
StencilBufferFormat
,
&
depthBits
,
&
stencilBits
);
PUSH2
(
WGL_DRAW_TO_PBUFFER_ARB
,
1
);
/* We need pbuffer support; doublebuffering isn't needed */
PUSH2
(
WGL_PIXEL_TYPE_ARB
,
WGL_TYPE_RGBA_ARB
);
/* Make sure we don't get a float or color index format */
PUSH2
(
WGL_COLOR_BITS_ARB
,
colorBits
);
PUSH2
(
WGL_ALPHA_BITS_ARB
,
alphaBits
);
PUSH2
(
WGL_DEPTH_BITS_ARB
,
depthBits
);
PUSH2
(
WGL_STENCIL_BITS_ARB
,
stencilBits
);
PUSH1
(
0
);
/* end the list */
#undef PUSH1
#undef PUSH2
/* Try to find a pixelformat that matches exactly. If that fails let ChoosePixelFormat try to find a close match */
if
(
!
GL_EXTCALL
(
wglChoosePixelFormatARB
(
hdc_parent
,
(
const
int
*
)
&
attribs
,
NULL
,
1
,
&
iPixelFormat
,
&
nFormats
)))
{
PIXELFORMATDESCRIPTOR
pfd
;
TRACE
(
"Falling back to ChoosePixelFormat as wglChoosePixelFormatARB failed
\n
"
);
ZeroMemory
(
&
pfd
,
sizeof
(
pfd
));
pfd
.
nSize
=
sizeof
(
pfd
);
pfd
.
nVersion
=
1
;
pfd
.
dwFlags
=
PFD_SUPPORT_OPENGL
|
PFD_DOUBLEBUFFER_DONTCARE
|
PFD_DRAW_TO_WINDOW
;
pfd
.
iPixelType
=
PFD_TYPE_RGBA
;
pfd
.
cColorBits
=
colorBits
;
pfd
.
cDepthBits
=
depthBits
;
pfd
.
cStencilBits
=
stencilBits
;
pfd
.
iLayerType
=
PFD_MAIN_PLANE
;
iPixelFormat
=
ChoosePixelFormat
(
hdc_parent
,
&
pfd
);
if
(
!
iPixelFormat
)
{
/* If this happens something is very wrong as ChoosePixelFormat barely fails */
ERR
(
"Can't find a suitable iPixelFormat for the pbuffer
\n
"
);
}
}
TRACE
(
"Creating a pBuffer drawable for the new context
\n
"
);
pbuffer
=
GL_EXTCALL
(
wglCreatePbufferARB
(
hdc_parent
,
iPixelFormat
,
target
->
currentDesc
.
Width
,
target
->
currentDesc
.
Height
,
0
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment