annotate libvo/vo_directx.c @ 9278:caea8ed36b48

The reason why mplayer crashes (in some cases) when using x11 output and -wid (>0) parameter is this: Mplayer by default creates a colormap using DirectColor visual. If the window given to mplayer uses TrueColor visual there will be an error when mplayer sets the colormap for the window. This patch modifies mplayer to use TrueColor visual if the window given to mplayer uses TrueColor. Another solution is to make sure that the window given to mplayer is created using DirectColor visual if it is supported by the display. Jouni Tulkki <jitulkki@cc.hut.fi>
author arpi
date Tue, 04 Feb 2003 18:31:44 +0000
parents 7e14d06ab255
children edfe34c5405d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1 /******************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
2 * vo_directx.c: Directx v2 or later DirectDraw interface for MPlayer
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
3 * Copyright (c) 2002 Sascha Sommer <saschasommer@freenet.de>.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
4 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
7 * the Free Software Foundation; either version 2 of the License, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
8 * (at your option) any later version.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
9 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
13 * GNU General Public License for more details.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
14 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
16 * along with this program; if not, write to the Free Software
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
18 *
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
19 *****************************************************************************/
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
20
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
21 #include <windows.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
22 #include <windowsx.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
23 #include <ddraw.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
24 #include <stdlib.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
25 #include <errno.h>
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
26 #include "config.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
27 #include "video_out.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
28 #include "video_out_internal.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
29 #include "fastmemcpy.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
30 #include "../input/input.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
31 #include "../linux/keycodes.h"
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
32 #include "../mp_msg.h"
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
33 #include "aspect.h"
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
34
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
35 static LPDIRECTDRAW2 g_lpdd = NULL; //DirectDraw Object
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
36 static LPDIRECTDRAWSURFACE g_lpddsPrimary = NULL; //Primary Surface: viewport through the Desktop
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
37 static LPDIRECTDRAWSURFACE g_lpddsOverlay = NULL; //Overlay Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
38 static LPDIRECTDRAWSURFACE g_lpddsBack = NULL; //Back surface
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
39 static LPDIRECTDRAWCLIPPER g_lpddclipper; //clipper object, can only be used without overlay
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
40 static DDSURFACEDESC ddsdsf; //surface descripiton needed for locking
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
41 static HINSTANCE hddraw_dll; //handle to ddraw.dll
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
42 static RECT rd; //rect of our stretched image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
43 static RECT rs; //rect of our source image
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
44 static HWND hWnd=NULL; //handle to the window
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
45 static uint32_t ontop=0; //always in foreground
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
46 static uint32_t image_width, image_height; //image width and height
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
47 static uint32_t d_image_width, d_image_height; //image width and height zoomed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
48 static uint8_t *image=NULL; //image data
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
49 static uint32_t image_format; //image format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
50 static uint32_t vm = 0; //exclusive mode, allows resolution switching (not implemented yet)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
51 static uint32_t fs = 0; //display in window or fullscreen
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
52 static uint32_t dstride; //surface stride
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
53 static uint32_t nooverlay = 0; //NonOverlay mode
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
54 static DWORD destcolorkey; //colorkey for our surface
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
55 static COLORREF windowcolor = RGB(0,0,16); //windowcolor == colorkey
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
56
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
57 extern void mplayer_put_key(int code); //let mplayer handel the keyevents
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
58 extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride));
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
59 extern int vo_doublebuffering; //tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
60
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
61 /*****************************************************************************
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
62 * DirectDraw GUIDs.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
63 * Defining them here allows us to get rid of the dxguid library during
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
64 * the linking stage.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
65 *****************************************************************************/
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
66 static const GUID IID_IDirectDraw2 =
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
67 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
68 0xB3A6F3E0,0x2B43,0x11CF,{0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
69 };
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
70
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
71 typedef struct directx_fourcc_caps
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
72 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
73 char* img_format_name; //human readable name
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
74 uint32_t img_format; //as MPlayer image format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
75 uint32_t drv_caps; //what hw supports with this format
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
76 DDPIXELFORMAT g_ddpfOverlay; //as Directx Sourface description
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
77 } directx_fourcc_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
78
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
79
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
80 static directx_fourcc_caps g_ddpf[] =
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
81 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
82 {"YV12 ",IMGFMT_YV12 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','1','2'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
83 {"I420 ",IMGFMT_I420 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','4','2','0'),0,0,0,0,0}}, //yv12 with swapped uv
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
84 {"IYUV ",IMGFMT_IYUV ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('I','Y','U','V'),0,0,0,0,0}}, //same as i420
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
85 {"YVU9 ",IMGFMT_YVU9 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','V','U','9'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
86 {"YUY2 ",IMGFMT_YUY2 ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('Y','U','Y','2'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
87 // {"UYVY ",IMGFMT_UYVY ,0,{sizeof(DDPIXELFORMAT), DDPF_FOURCC,MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
88 {"RGB15",IMGFMT_RGB15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000003E0, 0x00007C00, 0}}, //RGB 5:5:5
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
89 {"BGR15",IMGFMT_BGR15,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x00007C00, 0x000003E0, 0x0000001F, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
90 {"RGB16",IMGFMT_RGB16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000F800, 0x000007E0, 0x0000001F, 0}}, //RGB 5:6:5
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
91 {"BGR16",IMGFMT_BGR16,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0x0000001F, 0x000007E0, 0x0000F800, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
92 {"RGB24",IMGFMT_RGB24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
93 {"BGR24",IMGFMT_BGR24,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 24, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
94 {"RGB32",IMGFMT_RGB32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0}},
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
95 {"BGR32",IMGFMT_BGR32,0,{sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0}}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
96 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
97 #define NUM_FORMATS (sizeof(g_ddpf) / sizeof(g_ddpf[0]))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
98
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
99 static vo_info_t info =
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
100 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
101 "Directx DDraw YUV/RGB/BGR renderer",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
102 "directx",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
103 "Sascha Sommer <saschasommer@freenet.de>",
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
104 ""
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
105 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
106
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 7778
diff changeset
107 LIBVO_EXTERN(directx)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
108
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
109 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
110 unsigned char *srca, int stride)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
111 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
112 switch(image_format) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
113 case IMGFMT_YV12 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
114 case IMGFMT_I420 :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
115 case IMGFMT_IYUV :
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
116 case IMGFMT_YVU9 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
117 vo_draw_alpha_yv12(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + x0,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
118 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
119 case IMGFMT_YUY2 :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
120 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image)+ dstride*y0 + 2*x0 ,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
121 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
122 case IMGFMT_UYVY :
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
123 vo_draw_alpha_yuy2(w,h,src,srca,stride,((uint8_t *) image) + dstride*y0 + 2*x0 + 1,dstride);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
124 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
125 case IMGFMT_RGB15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
126 case IMGFMT_BGR15:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
127 vo_draw_alpha_rgb15(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
128 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
129 case IMGFMT_RGB16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
130 case IMGFMT_BGR16:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
131 vo_draw_alpha_rgb16(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+2*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
132 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
133 case IMGFMT_RGB24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
134 case IMGFMT_BGR24:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
135 vo_draw_alpha_rgb24(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
136 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
137 case IMGFMT_RGB32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
138 case IMGFMT_BGR32:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
139 vo_draw_alpha_rgb32(w,h,src,srca,stride,((uint8_t *) image)+dstride*y0+4*x0,dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
140 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
141 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
142 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
143
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
144 static void draw_osd(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
145 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
146 vo_draw_text(image_width,image_height,draw_alpha);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
147 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
148
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
149 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
150 query_format(uint32_t format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
151 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
152 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
153 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
154 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
155 if (g_ddpf[i].img_format == format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
156 return g_ddpf[i].drv_caps;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
157 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
158 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
159 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
160 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
161
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
162 static uint32_t Directx_CreatePrimarySurface()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
163 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
164 DDSURFACEDESC ddsd;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
165 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
166 if(g_lpddsPrimary)g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
167 g_lpddsPrimary=NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
168 ZeroMemory(&ddsd, sizeof(ddsd));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
169 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
170 //set flags and create a primary surface.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
171 ddsd.dwFlags = DDSD_CAPS;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
172 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
173 if(g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsd, &g_lpddsPrimary, NULL )== DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
174 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary surface created\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
175 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
176 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
177 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not create primary surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
178 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
179 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
180 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
181 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
182
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
183 static uint32_t Directx_CreateOverlay(uint32_t imgfmt)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
184 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
185 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
186 DDSURFACEDESC ddsdOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
187 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
188 while ( i < NUM_FORMATS +1 && imgfmt != g_ddpf[i].img_format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
189 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
190 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
191 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
192 if (!g_lpdd || !g_lpddsPrimary)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
193 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
194 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
195 if (g_lpddsOverlay)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
196 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
197 g_lpddsOverlay= NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
198 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
199 //create our overlay
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
200 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
201 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
202 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
203 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
204 ddsdOverlay.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
205 ddsdOverlay.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
206 ddsdOverlay.dwBackBufferCount=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
207 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
208 if(vo_doublebuffering) //tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
209 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
210 if (g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL)== DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
211 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
212 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>overlay with format %s created\n",g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
213 //get the surface directly attached to the primary (the back buffer)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
214 ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
215 if(g_lpddsOverlay->lpVtbl->GetAttachedSurface(g_lpddsOverlay,&ddsdOverlay.ddsCaps, &g_lpddsBack) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
216 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
217 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get attached surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
218 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
219 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
220 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
221 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
222 vo_doublebuffering=0; //disable tribblebuffering
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
223 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>cannot create tribblebuffer overlay with format %s\n",g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
224 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
225 //single buffer
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
226 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using singlebuffer overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
227 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
228 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
229 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
230 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
231 // try to create the overlay surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
232 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
233 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
234 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
235 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
236 switch(ddrval)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
237 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
238 case DDERR_INCOMPATIBLEPRIMARY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
239 {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
240 case DDERR_INVALIDCAPS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
241 {mp_msg(MSGT_VO, MSGL_ERR,"invalid caps\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
242 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
243 {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
244 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
245 {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
246 case DDERR_INVALIDPIXELFORMAT:
7713
32878695ca8b more correct flags
faust3
parents: 7682
diff changeset
247 {mp_msg(MSGT_VO, MSGL_ERR,"invalid pixelformat: %s\n",g_ddpf[i].img_format_name);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
248 case DDERR_NODIRECTDRAWHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
249 {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
250 case DDERR_NOEMULATION:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
251 {mp_msg(MSGT_VO, MSGL_ERR,"cant emulate\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
252 case DDERR_NOFLIPHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
253 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do flip\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
254 case DDERR_NOOVERLAYHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
255 {mp_msg(MSGT_VO, MSGL_ERR,"hardware can't do overlay\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
256 case DDERR_OUTOFMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
257 {mp_msg(MSGT_VO, MSGL_ERR,"not enough system memory\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
258 case DDERR_UNSUPPORTEDMODE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
259 {mp_msg(MSGT_VO, MSGL_ERR,"unsupported mode\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
260 case DDERR_OUTOFVIDEOMEMORY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
261 {mp_msg(MSGT_VO, MSGL_ERR,"not enough video memory\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
262 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
263 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
264 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
265 g_lpddsBack = g_lpddsOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
266 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
267 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
268
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
269 static uint32_t Directx_CreateBackpuffer()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
270 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
271 DDSURFACEDESC ddsd;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
272 //cleanup
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
273 if (g_lpddsBack)g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
274 g_lpddsBack=NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
275 ZeroMemory(&ddsd, sizeof(ddsd));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
276 ddsd.dwSize = sizeof(ddsd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
277 ddsd.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
278 ddsd.dwFlags= DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
279 ddsd.dwWidth=image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
280 ddsd.dwHeight=image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
281 if(g_lpdd->lpVtbl->CreateSurface( g_lpdd, &ddsd, &g_lpddsBack, 0 ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
282 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
283 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
284 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
285 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
286 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>backbuffer created\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
287 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
288 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
289
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
290 static void uninit(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
291 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
292 if (g_lpddclipper != NULL) g_lpddclipper->lpVtbl->Release(g_lpddclipper);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
293 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
294 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
295 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
296 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>back surface released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
297 if(vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
298 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
299 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
300 g_lpddsOverlay = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
301 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surface released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
302 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
303 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
304 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
305 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>primary released\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
306 if(hWnd != NULL)DestroyWindow(hWnd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
307 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>window destroyed\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
308 if (g_lpdd != NULL) g_lpdd->lpVtbl->Release(g_lpdd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
309 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>directdrawobject released\n");
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
310 FreeLibrary( hddraw_dll);
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
311 hddraw_dll= NULL;
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
312 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>ddraw.dll freed\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
313 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
314 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
315
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
316 static uint32_t Directx_InitDirectDraw()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
317 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
318 HRESULT (WINAPI *OurDirectDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
319 LPDIRECTDRAW lpDDraw;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
320 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
321
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
322 //load direct draw DLL: based on videolans code
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
323 hddraw_dll = LoadLibrary("DDRAW.DLL");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
324 if( hddraw_dll == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
325 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
326 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed loading ddraw.dll\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
327 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
328 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
329 OurDirectDrawCreate = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreate");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
330 if ( OurDirectDrawCreate == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
331 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
332 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
333 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
334 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>failed geting proc address\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
335 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
336 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
337 // initialize DirectDraw and create directx v1 object
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
338 if (OurDirectDrawCreate( NULL, &lpDDraw, NULL ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
339 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
340 lpDDraw = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
341 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
342 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
343 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't initialize ddraw\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
344 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
345 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
346 // ask IDirectDraw for IDirectDraw2
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
347 if (lpDDraw->lpVtbl->QueryInterface(lpDDraw, &IID_IDirectDraw2, (void **)&g_lpdd) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
348 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
349 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>no directx 2 installed\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
350 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
351 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
352 //release our old interface and free ddraw.dll
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
353 lpDDraw->lpVtbl->Release(lpDDraw);
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
354 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>lpDDraw released\n" );
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
355 //set cooperativelevel: for our tests, no handle to a window is needed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
356 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, NULL, DDSCL_NORMAL) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
357 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
358 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>could not set cooperativelevel for hardwarecheck\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
359 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
360 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
361 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Inited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
362 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
363 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
364
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
365 static void check_events(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
366 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
367 MSG msg;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
368 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
369 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
370 TranslateMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
371 DispatchMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
372 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
373 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
374
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
375 static uint32_t Directx_ManageDisplay(uint32_t width,uint32_t height)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
376 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
377 RECT rd_window;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
378 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
379 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
380 DDOVERLAYFX ovfx;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
381 DWORD dwUpdateFlags=0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
382 HWND hWndafter;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
383 uint32_t xscreen = GetSystemMetrics(SM_CXSCREEN);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
384 uint32_t yscreen = GetSystemMetrics(SM_CYSCREEN);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
385 POINT point_window;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
386 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
387 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
388 /*center and zoom image*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
389 rd_window.top = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
390 rd_window.left = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
391 rd_window.right = xscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
392 rd_window.bottom = yscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
393 aspect(&width,&height,A_ZOOM);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
394 rd.left = (xscreen-width)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
395 rd.right = rd.left+width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
396 rd.top = (yscreen-height)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
397 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
398 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
399 else /*windowed*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
400 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
401 GetClientRect (hWnd, &rd_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
402 if((rd_window.top == rd_window.bottom)&&!nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
403 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
404 /*window is minimized let's hide our overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
405 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL); //hide the overlay
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
406 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
407 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
408 /*width and height are zero therefore we have to get them from the window size*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
409 if(!width)width = rd_window.right - rd_window.left;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
410 if(!height)height = rd_window.bottom - rd_window.top;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
411 point_window.x = 0; //overlayposition relative to the window
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
412 point_window.y = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
413 ClientToScreen(hWnd,&point_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
414 rd.left = point_window.x;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
415 rd.top = point_window.y;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
416 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
417 rd.right = rd.left + width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
418 rd_window = rd;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
419 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
420
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
421 /*ok, let's workaround some overlay limitations*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
422 if(!nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
423 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
424 uint32_t uStretchFactor1000; //minimum stretch
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
425 uint32_t xstretch1000,ystretch1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
426 /*get driver capabilities*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
427 ZeroMemory(&capsDrv, sizeof(capsDrv));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
428 capsDrv.dwSize = sizeof(capsDrv);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
429 if(g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL) != DD_OK)return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
430 /*do not allow to zoom or shrink if hardware isn't able to do so*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
431 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
432 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
433 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
434 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink x\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
435 width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
436 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
437 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
438 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
439 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHXN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
440 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch x\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
441 width = image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
442 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
443 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
444 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
445 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only shrinkN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
446 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't shrink y\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
447 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
448 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
449 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
450 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
451 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHYN)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can only stretchN\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
452 else mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't stretch y\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
453 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
454 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
455 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
456 uStretchFactor1000 = capsDrv.dwMinOverlayStretch>1000 ? capsDrv.dwMinOverlayStretch : 1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
457 rd.right = ((width+rd.left)*uStretchFactor1000+999)/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
458 rd.bottom = (height+rd.top)*uStretchFactor1000/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
459 /*calculate xstretch1000 and ystretch1000*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
460 xstretch1000 = ((rd.right - rd.left)* 1000)/image_width ;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
461 ystretch1000 = ((rd.bottom - rd.top)* 1000)/image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
462 /*handle move outside of window with cropping
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
463 not really needed with colorkey, but shouldn't hurt*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
464 rs.left=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
465 rs.right=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
466 rs.top=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
467 rs.bottom=image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
468 if(!fs)rd_window = rd; /*don't crop the window !!!*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
469 if(rd.left < 0) //move out left
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
470 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
471 rs.left=(-rd.left*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
472 rd.left = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
473 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
474 else rs.left=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
475 if(rd.top < 0) //move out up
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
476 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
477 rs.top=(-rd.top*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
478 rd.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
479 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
480 else rs.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
481 if(rd.right > xscreen) //move out right
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
482 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
483 rs.right=((xscreen-rd.left)*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
484 rd.right= xscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
485 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
486 else rs.right = image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
487 if(rd.bottom > yscreen) //move out down
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
488 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
489 rs.bottom=((yscreen-rd.top)*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
490 rd.bottom= yscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
491 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
492 else rs.bottom= image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
493 /*the last thing to check are alignment restrictions
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
494 these expressions (x & -y) just do alignment by dropping low order bits...
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
495 so to round up, we add first, then truncate*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
496 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
497 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & -(signed)(capsDrv.dwAlignBoundarySrc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
498 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
499 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & -(signed) (capsDrv.dwAlignSizeSrc));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
500 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
501 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
502 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
503 if(!fs)rd_window.left = (rd_window.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest); //don't forget the window
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
504 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
505 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
506 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
507 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
508 if(!fs)rd_window.right = rd_window.left + ((rd_window.right - rd_window.left) & -(signed) (capsDrv.dwAlignSizeDest)); //don't forget the window
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
509 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
510 /*create an overlay FX structure to specify a destination color key*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
511 ZeroMemory(&ovfx, sizeof(ovfx));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
512 ovfx.dwSize = sizeof(ovfx);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
513 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
514 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
515 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
516 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
517 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
518 else
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
519 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
520 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
521 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
522 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
523 // set the flags we'll send to UpdateOverlay //DDOVER_AUTOFLIP|DDOVERFX_MIRRORLEFTRIGHT|DDOVERFX_MIRRORUPDOWN could be usefull?;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
524 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
525 /*if hardware can't do colorkeying set the window on top*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
526 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
527 else ontop = 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
528 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
529 /*calculate window rect with borders*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
530 if(!fs)AdjustWindowRect(&rd_window,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
531
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
532 if((fs) || (!fs && ontop))hWndafter=HWND_TOPMOST;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
533 else hWndafter=HWND_NOTOPMOST;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
534
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
535 /*display the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
536 SetWindowPos(hWnd,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
537 hWndafter,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
538 rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
539 rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
540 rd_window.right - rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
541 rd_window.bottom - rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
542 SWP_SHOWWINDOW|SWP_NOOWNERZORDER);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
543 //printf("Window:x:%i,y:%i,w:%i,h:%i\n",rd_window.left,rd_window.top,rd_window.right - rd_window.left,rd_window.bottom - rd_window.top);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
544 //printf("Overlay:x1:%i,y1:%i,x2:%i,y2:%i,w:%i,h:%i\n",rd.left,rd.top,rd.right,rd.bottom,rd.right - rd.left,rd.bottom - rd.top);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
545 //printf("Source:x1:%i,x2:%i,y1:%i,y2:%i\n",rs.left,rs.right,rs.top,rs.bottom);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
546 //printf("Image:x:%i->%i,y:%i->%i\n",image_width,d_image_width,image_height,d_image_height);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
547
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
548
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
549 /*for nonoverlay mode we are finished, for overlay mode we have to display the overlay first*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
550 if(nooverlay)return 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
551
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
552 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
553 if(FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
554 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
555 // one cause might be the driver lied about minimum stretch
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
556 // we should try upping the destination size a bit, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
557 // perhaps shrinking the source size
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
558 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
559 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Overlay:x1:%i,y1:%i,x2:%i,y2:%i,w:%i,h:%i\n",rd.left,rd.top,rd.right,rd.bottom,rd.right - rd.left,rd.bottom - rd.top );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
560 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
561 switch (ddrval)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
562 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
563 case DDERR_NOSTRETCHHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
564 {mp_msg(MSGT_VO, MSGL_ERR ,"hardware can't stretch: try to size the window back\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
565 case DDERR_INVALIDRECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
566 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
567 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
568 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
569 case DDERR_HEIGHTALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
570 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
571 case DDERR_XALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
572 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
573 case DDERR_UNSUPPORTED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
574 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
575 case DDERR_INVALIDSURFACETYPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
576 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
577 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
578 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
579 case DDERR_SURFACELOST:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
580 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
581 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
582 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
583 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
584 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
585 if(ddrval !=DD_OK)mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>UpdateOverlay failed again\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
586 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
587 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
588 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
589 /*ok we can't do anything about it -> hide overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
590 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
591 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
592 ddrval = g_lpddsOverlay->lpVtbl->UpdateOverlay(g_lpddsOverlay,NULL, g_lpddsPrimary, NULL, DDOVER_HIDE, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
593 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
594 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
595 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
596 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
597 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
598
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
599 //find out supported overlay pixelformats
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
600 static uint32_t Directx_CheckOverlayPixelformats()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
601 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
602 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
603 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
604 DDSURFACEDESC ddsdOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
605 uint32_t i;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
606 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
607 //get driver caps to determine overlay support
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
608 ZeroMemory(&capsDrv, sizeof(capsDrv));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
609 capsDrv.dwSize = sizeof(capsDrv);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
610 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
611 if (FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
612 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
613 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>failed getting ddrawcaps\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
614 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
615 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
616 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
617 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
618 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>Your card doesn't support overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
619 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
620 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
621 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>testing supported overlay pixelformats\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
622 //it is not possible to query for pixel formats supported by the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
623 //overlay hardware: try out various formats till one works
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
624 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
625 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
626 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
627 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
628 ddsdOverlay.dwWidth=300;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
629 ddsdOverlay.dwHeight=280;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
630 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
631 //try to create an overlay surface using one of the pixel formats in our global list
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
632 i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
633 do
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
634 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
635 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
636 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
637 if (ddrval == DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
638 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
639 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s supported\n",i,g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
640 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD |VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
641 formatcount++;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
642 else mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT OVERLAY>%i %s not supported\n",i,g_ddpf[i].img_format_name);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
643 if (g_lpddsOverlay != NULL) {g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);g_lpddsOverlay = NULL;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
644 } while( ++i < NUM_FORMATS );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
645 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>Your card supports %i of %i overlayformats\n",formatcount, NUM_FORMATS);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
646 if (formatcount == 0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
647 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
648 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><WARN>Your card supports overlay, but we couldn't create one\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
649 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>This can have the following reasons:\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
650 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you are already using an overlay with another app\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
651 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- you don't have enough videomemory\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
652 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>- vo_directx doesn't support the cards overlay pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
653 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
654 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
655 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT)mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror left right\n"); //I don't have hardware which
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
656 if(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYMIRRORUPDOWN )mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>can mirror up down\n"); //supports those send me one and I'll implement ;)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
657 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
658 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
659
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
660 //find out the Pixelformat of the Primary Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
661 static uint32_t Directx_CheckPrimaryPixelformat()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
662 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
663 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
664 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
665 DDPIXELFORMAT ddpf;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
666 DDSURFACEDESC ddsd;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
667 HDC hdc;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
668 HRESULT hres;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
669 COLORREF rgbT=RGB(0,0,0);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
670 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>checking primary surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
671 memset( &ddpf, 0, sizeof( DDPIXELFORMAT ));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
672 ddpf.dwSize = sizeof( DDPIXELFORMAT );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
673 //we have to create a primary surface first
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
674 if(Directx_CreatePrimarySurface()!=0)return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
675 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
676 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
677 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>can't get pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
678 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
679 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
680 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
681 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
682 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
683 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
684 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
685 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
686 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><FORMAT PRIMARY>%i %s supported\n",i,g_ddpf[i].img_format_name);
7713
32878695ca8b more correct flags
faust3
parents: 7682
diff changeset
687 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
688 formatcount++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
689 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
690 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
691 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
692 }
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
693 //get the colorkey for overlay mode
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
694 destcolorkey = CLR_INVALID;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
695 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
696 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
697 rgbT = GetPixel(hdc, 0, 0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
698 SetPixel(hdc, 0, 0, windowcolor);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
699 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
700 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
701 // read back the converted color
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
702 ddsd.dwSize = sizeof(ddsd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
703 while ((hres = g_lpddsPrimary->lpVtbl->Lock(g_lpddsPrimary,NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
704 ;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
705 if (hres == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
706 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
707 destcolorkey = *(DWORD *) ddsd.lpSurface;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
708 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
709 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
710 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
711 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
712 if (windowcolor != CLR_INVALID && g_lpddsPrimary->lpVtbl->GetDC(g_lpddsPrimary,&hdc) == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
713 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
714 SetPixel(hdc, 0, 0, rgbT);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
715 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
716 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
717 //release primary
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
718 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
719 g_lpddsPrimary = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
720 if(formatcount==0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
721 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
722 mp_msg(MSGT_VO, MSGL_FATAL ,"<vo_directx><FATAL ERROR>Unknown Pixelformat\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
723 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
724 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
725 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
726 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
727
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
728 //function handles input
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
729 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
730 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
731 switch (message)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
732 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
733 case WM_DESTROY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
734 {
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
735 PostQuitMessage(0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
736 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
737 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
738 case WM_CLOSE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
739 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
740 mplayer_put_key('q');
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
741 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
742 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
743 case WM_WINDOWPOSCHANGED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
744 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
745 //printf("Windowposchange\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
746 if(g_lpddsBack != NULL) //or it will crash with -vm
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
747 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
748 Directx_ManageDisplay(0,0);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
749 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
750 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
751 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
752 case WM_SYSCOMMAND:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
753 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
754 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
755 { //kill screensaver etc.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
756 //note: works only when the window is active
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
757 //you can workaround this by disabling the allow screensaver option in
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
758 //the link to the app
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
759 case SC_SCREENSAVE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
760 case SC_MONITORPOWER:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
761 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
762 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
763 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
764 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
765 case WM_KEYDOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
766 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
767 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
768 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
769 case VK_LEFT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
770 {mplayer_put_key(KEY_LEFT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
771 case VK_UP:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
772 {mplayer_put_key(KEY_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
773 case VK_RIGHT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
774 {mplayer_put_key(KEY_RIGHT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
775 case VK_DOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
776 {mplayer_put_key(KEY_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
777 case VK_TAB:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
778 {mplayer_put_key(KEY_TAB);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
779 case VK_CONTROL:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
780 {mplayer_put_key(KEY_CTRL);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
781 case VK_DELETE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
782 {mplayer_put_key(KEY_DELETE);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
783 case VK_INSERT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
784 {mplayer_put_key(KEY_INSERT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
785 case VK_HOME:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
786 {mplayer_put_key(KEY_HOME);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
787 case VK_END:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
788 {mplayer_put_key(VK_END);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
789 case VK_PRIOR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
790 {mplayer_put_key(KEY_PAGE_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
791 case VK_NEXT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
792 {mplayer_put_key(KEY_PAGE_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
793 case VK_ESCAPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
794 {mplayer_put_key(KEY_ESC);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
795 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
796 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
797 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
798 case WM_CHAR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
799 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
800 mplayer_put_key(wParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
801 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
802 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
803
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
804 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
805 return DefWindowProc(hWnd, message, wParam, lParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
806 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
807
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
808 static uint32_t preinit(const char *arg)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
809 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
810 HINSTANCE hInstance = GetModuleHandle(NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
811 WNDCLASS wc;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
812 if(arg)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
813 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
814 if(!strcmp(arg,"noaccel"))
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
815 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
816 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>disabled overlay\n");
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
817 nooverlay = 1;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
818 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
819 else
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
820 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
821 mp_msg(MSGT_VO,MSGL_ERR,"<vo_directx><ERROR>unknown subdevice: %s\n",arg);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
822 return ENOSYS;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
823 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
824 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
825 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
826 if (Directx_CheckPrimaryPixelformat()!=0)return 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
827 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
828 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
829 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>hardware supports overlay\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
830 nooverlay = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
831 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
832 else //if we can't have overlay we create a backpuffer with the same imageformat as the primary surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
833 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
834 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
835 nooverlay = 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
836 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
837 wc.style = CS_HREDRAW | CS_VREDRAW;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
838 wc.lpfnWndProc = WndProc;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
839 wc.cbClsExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
840 wc.cbWndExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
841 wc.hInstance = hInstance;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
842 wc.hCursor = LoadCursor(NULL,IDC_ARROW);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
843 wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
844 wc.hbrBackground = CreateSolidBrush(windowcolor);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
845 wc.lpszClassName = "Mplayer - Movieplayer for Linux";
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
846 wc.lpszMenuName = NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
847 RegisterClass(&wc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
848 hWnd = CreateWindow("MPlayer - Movieplayer for Linux",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
849 "",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
850 WS_OVERLAPPEDWINDOW| WS_SIZEBOX,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
851 CW_USEDEFAULT, //position x
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
852 CW_USEDEFAULT, //position y
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
853 100, //width
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
854 100, //height
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
855 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
856 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
857 hInstance,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
858 NULL);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
859 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>initial mplayer window created\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
860 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>preinit succesfully finished\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
861 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
862 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
863
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
864 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
865 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
866 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
867 uint8_t *d;
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
868 uint32_t i=0, uvstride=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
869 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
870 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
871 s=src[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
872 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
873 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
874 s+=stride[0];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
875 d+=dstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
876 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
877
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
878 w/=2;h/=2;x/=2;y/=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
879
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
880 // copy U
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
881 d=image+dstride*image_height + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
882 if(image_format == IMGFMT_YV12)s=src[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
883 else s=src[1];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
884 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
885 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
886 s+=stride[1];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
887 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
888 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
889
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
890 // copy V
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
891 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
892 if(image_format == IMGFMT_YV12)s=src[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
893 else s=src[2];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
894 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
895 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
896 s+=stride[2];
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
897 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
898 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
899 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
900 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
901
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
902 static void flip_page(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
903 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
904 HRESULT dxresult;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
905 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
906 if (vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
907 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
908 // flip to the next image in the sequence
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
909 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
910 if(dxresult == DDERR_SURFACELOST)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
911 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
912 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR><vo_directx><INFO>Restoring Surface\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
913 g_lpddsBack->lpVtbl->Restore( g_lpddsBack );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
914 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
915 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
916 if(dxresult != DD_OK)mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>can't flip page\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
917 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
918 if(nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
919 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
920 DDBLTFX ddbltfx;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
921 // ask for the "NOTEARING" option
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
922 memset( &ddbltfx, 0, sizeof(DDBLTFX) );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
923 ddbltfx.dwSize = sizeof(DDBLTFX);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
924 ddbltfx.dwDDFX = DDBLTFX_NOTEARING;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
925 g_lpddsPrimary->lpVtbl->Blt(g_lpddsPrimary, &rd, g_lpddsBack, NULL, DDBLT_WAIT, &ddbltfx);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
926 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
927 g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT , NULL);
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
928 dstride = ddsdsf.lPitch;
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
929 image = ddsdsf.lpSurface;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
930 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
931
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
932 static uint32_t draw_frame(uint8_t *src[])
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
933 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
934 memcpy( image, *src, dstride * image_height );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
935 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
936 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
937
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
938 static uint32_t get_image(mp_image_t *mpi)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
939 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
940 if(mpi->flags&MP_IMGFLAG_READABLE) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>slow video ram\n");return VO_FALSE;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
941 if(mpi->type==MP_IMGTYPE_STATIC) {mp_msg(MSGT_VO, MSGL_V,"<vo_directx><ERROR>not static\n");return VO_FALSE;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
942 if((mpi->width==dstride) || (mpi->flags&(MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_ACCEPT_WIDTH)))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
943 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
944 if(mpi->flags&MP_IMGFLAG_PLANAR)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
945 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
946 if(image_format == IMGFMT_YV12)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
947 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
948 mpi->planes[2]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
949 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
950 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
951 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
952 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
953 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
954 mpi->planes[1]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
955 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
956 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
957 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
958 else if(image_format == IMGFMT_YVU9)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
959 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
960 mpi->planes[2] = image + dstride*image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
961 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
962 mpi->stride[1]=mpi->stride[2]=dstride/4;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
963 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
964 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
965 mpi->planes[0]=image;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
966 mpi->stride[0]=dstride;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
967 mpi->width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
968 mpi->height=image_height;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
969 mpi->flags|=MP_IMGFLAG_DIRECT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
970 mp_msg(MSGT_VO, MSGL_DBG3, "<vo_directx><INFO>Direct Rendering ENABLED\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
971 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
972 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
973 return VO_FALSE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
974 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
975
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
976 static uint32_t put_image(mp_image_t *mpi){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
977
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
978 uint32_t i = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
979 uint8_t *d;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
980 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
981 uint32_t x = mpi->x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
982 uint32_t y = mpi->y;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
983 uint32_t w = mpi->w;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
984 uint32_t h = mpi->h;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
985
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
986 if((mpi->flags&MP_IMGFLAG_DIRECT)||(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
987 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
988 mp_msg(MSGT_VO, MSGL_DBG3 ,"<vo_directx><INFO>put_image: nothing to do: drawslices\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
989 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
990 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
991
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
992 if (mpi->flags&MP_IMGFLAG_PLANAR)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
993 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
994
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
995 if(image_format!=IMGFMT_YVU9)draw_slice(mpi->planes,mpi->stride,mpi->w,mpi->h,0,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
996 else
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
997 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
998 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
999 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1000 s=mpi->planes[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1001 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1002 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1003 s+=mpi->stride[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1004 d+=dstride;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1005 }
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1006 w/=4;h/=4;x/=4;y/=4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1007 // copy V
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1008 d=image+dstride*image_height + dstride*y/4+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1009 s=mpi->planes[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1010 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1011 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1012 s+=mpi->stride[1];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1013 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1014 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1015 // copy U
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1016 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1017 s=mpi->planes[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1018 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1019 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1020 s+=mpi->stride[2];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1021 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1022 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1023 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1024 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1025 else //packed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1026 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1027 memcpy( image, mpi->planes[0], image_height * dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1028 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1029 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1030 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1031
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1032 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1033 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t options, char *title, uint32_t format)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1034 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1035 fs = options & 0x01;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1036 vm = options & 0x02;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1037 image_format = format;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1038 image_width = width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1039 image_height = height;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1040 d_image_width = d_width;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1041 d_image_height = d_height;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1042 aspect_save_orig(image_width,image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1043 aspect_save_prescale(d_image_width,d_image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1044 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1045 aspect(&d_image_width,&d_image_height,A_NOZOOM);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1046 SetWindowText(hWnd,title);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1047 /*release all surfaces*/
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1048 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1049 g_lpddsBack = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1050 if(vo_doublebuffering)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1051 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1052 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1053 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1054 g_lpddsOverlay = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1055 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1056 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1057 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surfaces released\n");
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1058 /*set cooperativelevel*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1059 if(vm) /*exclusive mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1060 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1061 fs=1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1062 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1063 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1064 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for exclusive mode");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1065 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1066 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1067 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1068 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1069 if(g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,640, 480, 16,0,0) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1070 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1071 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set displaymode\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1072 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1073 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1074 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1075 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using exclusive mode\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1076 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1077 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1078 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1079 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_NORMAL) != DD_OK)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1080 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1081 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't set cooperativelevel for windowed mode");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1082 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1083 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1084 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>using normal cooperativelevel\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1085 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1086 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1087 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1088 /*remove the borders*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1089 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1090 /*change backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1091 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1092 /*repaint*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1093 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1094 /*hide mouse*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1095 ShowCursor(FALSE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1096 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1097 /*create the surfaces*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1098 if(Directx_CreatePrimarySurface())return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1099 if (!nooverlay && Directx_CreateOverlay(image_format))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1100 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1101 nooverlay=1; /*overlay creation failed*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1102 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><WARN>can't use overlay mode => switching to nonoverlay\n");
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1103 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1104 if(nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1105 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1106 if(Directx_CreateBackpuffer())
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1107 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1108 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't get the driver to work on your system :(\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1109 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1110 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1111 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1112 vo_doublebuffering = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1113 /*create clipper for nonoverlay mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1114 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1115 g_lpddclipper=NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1116 if(g_lpdd->lpVtbl->CreateClipper(g_lpdd, 0, &g_lpddclipper,NULL)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't create clipper\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1117 if(g_lpddclipper->lpVtbl->SetHWnd (g_lpddclipper, 0, hWnd)!= DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate clipper with window\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1118 if(g_lpddsPrimary->lpVtbl->SetClipper (g_lpddsPrimary,g_lpddclipper)!=DD_OK){mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't associate primary surface with clipper\n");return 1;}
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1119 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper succesfully created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1120 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1121 Directx_ManageDisplay(d_image_width,d_image_height);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1122 memset(&ddsdsf, 0,sizeof(DDSURFACEDESC));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1123 ddsdsf.dwSize = sizeof (DDSURFACEDESC);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1124 g_lpddsBack->lpVtbl->Lock(g_lpddsBack,NULL,&ddsdsf, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1125 dstride = ddsdsf.lPitch;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1126 image = ddsdsf.lpSurface;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1127 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1128 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1129
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1130 static uint32_t control(uint32_t request, void *data, ...)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1131 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1132 switch (request) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1133
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1134 case VOCTRL_GET_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1135 return get_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1136 case VOCTRL_QUERY_FORMAT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1137 return query_format(*((uint32_t*)data));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1138 case VOCTRL_DRAW_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1139 return put_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1140 case VOCTRL_FULLSCREEN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1141 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1142 if(vm)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1143 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1144 mp_msg(MSGT_VO, MSGL_ERR,"<vo_directx><ERROR>currently we do not allow to switch from exclusive to windowed mode\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1145 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1146 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1147 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1148 WINDOWPLACEMENT window_placement;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1149 uint32_t width = 0; /*default: restore to the size it had before maximizing*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1150 uint32_t height = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1151 window_placement.length = sizeof(WINDOWPLACEMENT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1152 GetWindowPlacement(hWnd, &window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1153 if(fs) /*go to windowed*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1154 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1155 fs = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1156 /*prevent the screen being filled with garbage*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1157 window_placement.showCmd = SW_SHOWMINIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1158 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1159 /*change style and restore the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1160 SetWindowLong(hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW|WS_SIZEBOX);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1161 window_placement.showCmd = SW_SHOWNORMAL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1162 SetWindowPlacement(hWnd,&window_placement );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1163 /*restore backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1164 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(windowcolor));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1165 /*never ever make a big window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1166 if(((window_placement.rcNormalPosition.bottom - window_placement.rcNormalPosition.top)==GetSystemMetrics(SM_CYSCREEN))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1167 &&((window_placement.rcNormalPosition.right - window_placement.rcNormalPosition.left)==GetSystemMetrics(SM_CXSCREEN)))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1168 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1169 width = d_image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1170 height = d_image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1171 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1172 /*show cursor again*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1173 ShowCursor(TRUE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1174 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1175 else /*go to fullscreen*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1176 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1177 fs = 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1178 /*remove decoration and maximize*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1179 SetWindowLong(hWnd,GWL_STYLE,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1180 window_placement.showCmd = SW_SHOWMAXIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1181 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1182 /*make the window really black*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1183 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1184 /*hide mouse cursor in fullscreen mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1185 if(ShowCursor(FALSE)<0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1186 else while(ShowCursor(FALSE)>=0)mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx>ShowCursor(FALSE)>=0\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1187 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1188 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1189 Directx_ManageDisplay(width,height);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1190 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1191 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1192 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1193 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1194 return VO_NOTIMPL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1195 }