annotate libvo/vo_directx.c @ 9941:c6c03483595b

at least it works now, but it's horrible slow and broken. double buffer and direct rendering support are needed to make this remotely usable...
author rfelker
date Sat, 19 Apr 2003 18:57:16 +0000
parents 3933e0ef000c
children 047436ae7143
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"
9380
edfe34c5405d linux->osdep
arpi
parents: 8668
diff changeset
31 #include "../osdep/keycodes.h"
7537
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);
9619
faust3
parents: 9488
diff changeset
293 g_lpddclipper = NULL;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
294 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper released\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
295 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
296 g_lpddsBack = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
297 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
298 if(vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
299 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
300 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
301 g_lpddsOverlay = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
302 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
303 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
304 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
305 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
306 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
307 if(hWnd != NULL)DestroyWindow(hWnd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
308 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
309 if (g_lpdd != NULL) g_lpdd->lpVtbl->Release(g_lpdd);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
310 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
311 FreeLibrary( hddraw_dll);
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
312 hddraw_dll= NULL;
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
313 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
314 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>uninited\n");
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
317 static uint32_t Directx_InitDirectDraw()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
318 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
319 HRESULT (WINAPI *OurDirectDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
320 LPDIRECTDRAW lpDDraw;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
321 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>Initing DirectDraw\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
322
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
323 //load direct draw DLL: based on videolans code
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
324 hddraw_dll = LoadLibrary("DDRAW.DLL");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
325 if( hddraw_dll == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
326 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
327 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
328 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
329 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
330 OurDirectDrawCreate = (void *)GetProcAddress(hddraw_dll, "DirectDrawCreate");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
331 if ( OurDirectDrawCreate == NULL )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
332 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
333 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
334 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
335 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
336 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
337 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
338 // initialize DirectDraw and create directx v1 object
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
339 if (OurDirectDrawCreate( NULL, &lpDDraw, NULL ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
340 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
341 lpDDraw = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
342 FreeLibrary( hddraw_dll );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
343 hddraw_dll = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
344 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
345 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
346 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
347 // ask IDirectDraw for IDirectDraw2
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
348 if (lpDDraw->lpVtbl->QueryInterface(lpDDraw, &IID_IDirectDraw2, (void **)&g_lpdd) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
349 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
350 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
351 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
352 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
353 //release our old interface and free ddraw.dll
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
354 lpDDraw->lpVtbl->Release(lpDDraw);
7778
f804db78f704 10l - noticed by Soeren Mueller <soeren.mueller at webwasher.com>
faust3
parents: 7713
diff changeset
355 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
356 //set cooperativelevel: for our tests, no handle to a window is needed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
357 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, NULL, DDSCL_NORMAL) != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
358 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
359 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
360 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
361 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
362 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>DirectDraw Inited\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
363 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
366 static void check_events(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
367 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
368 MSG msg;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
369 while (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
370 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
371 TranslateMessage(&msg);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
372 DispatchMessage(&msg);
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
375
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
376 static uint32_t Directx_ManageDisplay(uint32_t width,uint32_t height)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
377 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
378 RECT rd_window;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
379 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
380 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
381 DDOVERLAYFX ovfx;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
382 DWORD dwUpdateFlags=0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
383 HWND hWndafter;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
384 uint32_t xscreen = GetSystemMetrics(SM_CXSCREEN);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
385 uint32_t yscreen = GetSystemMetrics(SM_CYSCREEN);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
386 POINT point_window;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
387 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
388 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
389 /*center and zoom image*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
390 rd_window.top = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
391 rd_window.left = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
392 rd_window.right = xscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
393 rd_window.bottom = yscreen;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
394 aspect(&width,&height,A_ZOOM);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
395 rd.left = (xscreen-width)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
396 rd.right = rd.left+width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
397 rd.top = (yscreen-height)/2;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
398 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
399 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
400 else /*windowed*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
401 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
402 GetClientRect (hWnd, &rd_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
403 if((rd_window.top == rd_window.bottom)&&!nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
404 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
405 /*window is minimized let's hide our overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
406 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
407 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
408 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
409 /*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
410 if(!width)width = rd_window.right - rd_window.left;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
411 if(!height)height = rd_window.bottom - rd_window.top;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
412 point_window.x = 0; //overlayposition relative to the window
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
413 point_window.y = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
414 ClientToScreen(hWnd,&point_window);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
415 rd.left = point_window.x;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
416 rd.top = point_window.y;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
417 rd.bottom = rd.top + height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
418 rd.right = rd.left + width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
419 rd_window = rd;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
420 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
421
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
422 /*ok, let's workaround some overlay limitations*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
423 if(!nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
424 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
425 uint32_t uStretchFactor1000; //minimum stretch
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
426 uint32_t xstretch1000,ystretch1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
427 /*get driver capabilities*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
428 ZeroMemory(&capsDrv, sizeof(capsDrv));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
429 capsDrv.dwSize = sizeof(capsDrv);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
430 if(g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL) != DD_OK)return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
431 /*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
432 if((width < image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
433 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
434 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
435 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
436 width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
437 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
438 else if((width > image_width)&& !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHX))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
439 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
440 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
441 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
442 width = image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
443 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
444 if((height < image_height) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSHRINKY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
445 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
446 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
447 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
448 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
449 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
450 else if((height > image_height ) && !(capsDrv.dwFXCaps & DDFXCAPS_OVERLAYSTRETCHY))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
451 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
452 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
453 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
454 height = image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
455 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
456 /*get minimum stretch, depends on display adaptor and mode (refresh rate!) */
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
457 uStretchFactor1000 = capsDrv.dwMinOverlayStretch>1000 ? capsDrv.dwMinOverlayStretch : 1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
458 rd.right = ((width+rd.left)*uStretchFactor1000+999)/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
459 rd.bottom = (height+rd.top)*uStretchFactor1000/1000;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
460 /*calculate xstretch1000 and ystretch1000*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
461 xstretch1000 = ((rd.right - rd.left)* 1000)/image_width ;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
462 ystretch1000 = ((rd.bottom - rd.top)* 1000)/image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
463 /*handle move outside of window with cropping
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
464 not really needed with colorkey, but shouldn't hurt*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
465 rs.left=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
466 rs.right=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
467 rs.top=0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
468 rs.bottom=image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
469 if(!fs)rd_window = rd; /*don't crop the window !!!*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
470 if(rd.left < 0) //move out left
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
471 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
472 rs.left=(-rd.left*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
473 rd.left = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
474 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
475 else rs.left=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
476 if(rd.top < 0) //move out up
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
477 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
478 rs.top=(-rd.top*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
479 rd.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
480 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
481 else rs.top = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
482 if(rd.right > xscreen) //move out right
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
483 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
484 rs.right=((xscreen-rd.left)*1000)/xstretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
485 rd.right= xscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
486 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
487 else rs.right = image_width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
488 if(rd.bottom > yscreen) //move out down
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
489 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
490 rs.bottom=((yscreen-rd.top)*1000)/ystretch1000;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
491 rd.bottom= yscreen;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
492 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
493 else rs.bottom= image_height;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
494 /*the last thing to check are alignment restrictions
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
495 these expressions (x & -y) just do alignment by dropping low order bits...
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
496 so to round up, we add first, then truncate*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
497 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYSRC) && capsDrv.dwAlignBoundarySrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
498 rs.left = (rs.left + capsDrv.dwAlignBoundarySrc / 2) & -(signed)(capsDrv.dwAlignBoundarySrc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
499 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZESRC) && capsDrv.dwAlignSizeSrc)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
500 rs.right = rs.left + ((rs.right - rs.left + capsDrv.dwAlignSizeSrc / 2) & -(signed) (capsDrv.dwAlignSizeSrc));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
501 if ((capsDrv.dwCaps & DDCAPS_ALIGNBOUNDARYDEST) && capsDrv.dwAlignBoundaryDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
502 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
503 rd.left = (rd.left + capsDrv.dwAlignBoundaryDest / 2) & -(signed)(capsDrv.dwAlignBoundaryDest);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
504 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
505 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
506 if ((capsDrv.dwCaps & DDCAPS_ALIGNSIZEDEST) && capsDrv.dwAlignSizeDest)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
507 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
508 rd.right = rd.left + ((rd.right - rd.left) & -(signed) (capsDrv.dwAlignSizeDest));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
509 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
510 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
511 /*create an overlay FX structure to specify a destination color key*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
512 ZeroMemory(&ovfx, sizeof(ovfx));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
513 ovfx.dwSize = sizeof(ovfx);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
514 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
515 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
516 ovfx.dckDestColorkey.dwColorSpaceLowValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
517 ovfx.dckDestColorkey.dwColorSpaceHighValue = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
518 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
519 else
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
520 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
521 ovfx.dckDestColorkey.dwColorSpaceLowValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
522 ovfx.dckDestColorkey.dwColorSpaceHighValue = destcolorkey;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
523 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
524 // 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
525 dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
526 /*if hardware can't do colorkeying set the window on top*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
527 if(capsDrv.dwCKeyCaps & DDCKEYCAPS_DESTOVERLAY) dwUpdateFlags |= DDOVER_KEYDESTOVERRIDE;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
528 else ontop = 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
529 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
530 /*calculate window rect with borders*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
531 if(!fs)AdjustWindowRect(&rd_window,WS_OVERLAPPEDWINDOW|WS_SIZEBOX,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
532
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
533 if((fs) || (!fs && ontop))hWndafter=HWND_TOPMOST;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
534 else hWndafter=HWND_NOTOPMOST;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
535
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
536 /*display the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
537 SetWindowPos(hWnd,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
538 hWndafter,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
539 rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
540 rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
541 rd_window.right - rd_window.left,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
542 rd_window.bottom - rd_window.top,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
543 SWP_SHOWWINDOW|SWP_NOOWNERZORDER);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
544 //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
545 //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
546 //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
547 //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
548
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
549
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
550 /*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
551 if(nooverlay)return 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
552
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
553 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
554 if(FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
555 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
556 // one cause might be the driver lied about minimum stretch
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
557 // we should try upping the destination size a bit, or
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
558 // perhaps shrinking the source size
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
559 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>UpdateOverlay failed\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
560 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
561 mp_msg(MSGT_VO, MSGL_ERR ,"<vo_directx><ERROR>");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
562 switch (ddrval)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
563 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
564 case DDERR_NOSTRETCHHW:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
565 {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
566 case DDERR_INVALIDRECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
567 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid rectangle\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
568 case DDERR_INVALIDPARAMS:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
569 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid parameters\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
570 case DDERR_HEIGHTALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
571 {mp_msg(MSGT_VO, MSGL_ERR ,"height align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
572 case DDERR_XALIGN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
573 {mp_msg(MSGT_VO, MSGL_ERR ,"x align\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
574 case DDERR_UNSUPPORTED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
575 {mp_msg(MSGT_VO, MSGL_ERR ,"unsupported\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
576 case DDERR_INVALIDSURFACETYPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
577 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid surfacetype\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
578 case DDERR_INVALIDOBJECT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
579 {mp_msg(MSGT_VO, MSGL_ERR ,"invalid object\n");break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
580 case DDERR_SURFACELOST:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
581 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
582 mp_msg(MSGT_VO, MSGL_ERR ,"surfaces lost\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
583 g_lpddsOverlay->lpVtbl->Restore( g_lpddsOverlay ); //restore and try again
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
584 g_lpddsPrimary->lpVtbl->Restore( g_lpddsPrimary );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
585 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
586 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
587 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
588 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
589 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
590 /*ok we can't do anything about it -> hide overlay*/
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
591 if(ddrval != DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
592 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
593 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
594 return 1;
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
597 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
600 //find out supported overlay pixelformats
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
601 static uint32_t Directx_CheckOverlayPixelformats()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
602 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
603 DDCAPS capsDrv;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
604 HRESULT ddrval;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
605 DDSURFACEDESC ddsdOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
606 uint32_t i;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
607 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
608 //get driver caps to determine overlay support
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
609 ZeroMemory(&capsDrv, sizeof(capsDrv));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
610 capsDrv.dwSize = sizeof(capsDrv);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
611 ddrval = g_lpdd->lpVtbl->GetCaps(g_lpdd,&capsDrv, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
612 if (FAILED(ddrval))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
613 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
614 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
615 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
616 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
617 if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
618 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
619 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
620 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
621 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
622 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
623 //it is not possible to query for pixel formats supported by the
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
624 //overlay hardware: try out various formats till one works
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
625 ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
626 ddsdOverlay.dwSize = sizeof(ddsdOverlay);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
627 ddsdOverlay.ddsCaps.dwCaps=DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
628 ddsdOverlay.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
629 ddsdOverlay.dwWidth=300;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
630 ddsdOverlay.dwHeight=280;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
631 ddsdOverlay.dwBackBufferCount=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
632 //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
633 i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
634 do
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
635 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
636 ddsdOverlay.ddpfPixelFormat=g_ddpf[i].g_ddpfOverlay;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
637 ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
638 if (ddrval == DD_OK)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
639 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
640 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
641 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
642 formatcount++;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
643 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
644 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
645 } while( ++i < NUM_FORMATS );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
646 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
647 if (formatcount == 0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
648 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
649 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
650 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
651 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
652 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
653 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
654 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
655 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
656 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
657 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
658 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
661 //find out the Pixelformat of the Primary Surface
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
662 static uint32_t Directx_CheckPrimaryPixelformat()
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
663 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
664 uint32_t i=0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
665 uint32_t formatcount = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
666 DDPIXELFORMAT ddpf;
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
667 DDSURFACEDESC ddsd;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
668 HDC hdc;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
669 HRESULT hres;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
670 COLORREF rgbT=RGB(0,0,0);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
671 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
672 memset( &ddpf, 0, sizeof( DDPIXELFORMAT ));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
673 ddpf.dwSize = sizeof( DDPIXELFORMAT );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
674 //we have to create a primary surface first
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
675 if(Directx_CreatePrimarySurface()!=0)return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
676 if(g_lpddsPrimary->lpVtbl->GetPixelFormat( g_lpddsPrimary, &ddpf ) != DD_OK )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
677 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
678 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
679 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
680 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
681 while ( i < NUM_FORMATS )
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
682 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
683 if (g_ddpf[i].g_ddpfOverlay.dwRGBBitCount == ddpf.dwRGBBitCount)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
684 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
685 if (g_ddpf[i].g_ddpfOverlay.dwRBitMask == ddpf.dwRBitMask)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
686 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
687 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
688 g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
689 formatcount++;
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
692 i++;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
693 }
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
694 //get the colorkey for overlay mode
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
695 destcolorkey = CLR_INVALID;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
696 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
697 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
698 rgbT = GetPixel(hdc, 0, 0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
699 SetPixel(hdc, 0, 0, windowcolor);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
700 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
701 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
702 // read back the converted color
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
703 ddsd.dwSize = sizeof(ddsd);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
704 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
705 ;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
706 if (hres == DD_OK)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
707 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
708 destcolorkey = *(DWORD *) ddsd.lpSurface;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
709 if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
710 destcolorkey &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
711 g_lpddsPrimary->lpVtbl->Unlock(g_lpddsPrimary,NULL);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
712 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
713 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
714 {
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
715 SetPixel(hdc, 0, 0, rgbT);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
716 g_lpddsPrimary->lpVtbl->ReleaseDC(g_lpddsPrimary,hdc);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
717 }
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
718 //release primary
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
719 g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
720 g_lpddsPrimary = NULL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
721 if(formatcount==0)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
722 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
723 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
724 return 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
725 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
726 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
729 //function handles input
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
730 static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
731 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
732 switch (message)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
733 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
734 case WM_DESTROY:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
735 {
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
736 PostQuitMessage(0);
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
737 return 0;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
738 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
739 case WM_CLOSE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
740 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
741 mplayer_put_key('q');
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
742 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
743 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
744 case WM_WINDOWPOSCHANGED:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
745 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
746 //printf("Windowposchange\n");
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
747 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
748 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
749 Directx_ManageDisplay(0,0);
7624
b1a3b979c630 This patch hopefully fixes colorkeying and a segfault in exclusive mode
arpi
parents: 7537
diff changeset
750 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
751 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
752 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
753 case WM_SYSCOMMAND:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
754 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
755 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
756 { //kill screensaver etc.
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
757 //note: works only when the window is active
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
758 //you can workaround this by disabling the allow screensaver option in
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
759 //the link to the app
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
760 case SC_SCREENSAVE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
761 case SC_MONITORPOWER:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
762 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>killing screensaver\n" );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
763 return 0;
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
766 case WM_KEYDOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
767 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
768 switch (wParam)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
769 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
770 case VK_LEFT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
771 {mplayer_put_key(KEY_LEFT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
772 case VK_UP:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
773 {mplayer_put_key(KEY_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
774 case VK_RIGHT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
775 {mplayer_put_key(KEY_RIGHT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
776 case VK_DOWN:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
777 {mplayer_put_key(KEY_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
778 case VK_TAB:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
779 {mplayer_put_key(KEY_TAB);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
780 case VK_CONTROL:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
781 {mplayer_put_key(KEY_CTRL);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
782 case VK_DELETE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
783 {mplayer_put_key(KEY_DELETE);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
784 case VK_INSERT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
785 {mplayer_put_key(KEY_INSERT);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
786 case VK_HOME:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
787 {mplayer_put_key(KEY_HOME);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
788 case VK_END:
9894
3933e0ef000c 10l noticed by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9728
diff changeset
789 {mplayer_put_key(KEY_END);break;}
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
790 case VK_PRIOR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
791 {mplayer_put_key(KEY_PAGE_UP);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
792 case VK_NEXT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
793 {mplayer_put_key(KEY_PAGE_DOWN);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
794 case VK_ESCAPE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
795 {mplayer_put_key(KEY_ESC);break;}
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
796 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
797 break;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
798 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
799 case WM_CHAR:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
800 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
801 mplayer_put_key(wParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
802 break;
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
806 return DefWindowProc(hWnd, message, wParam, lParam);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
807 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
808
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
809 static uint32_t preinit(const char *arg)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
810 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
811 HINSTANCE hInstance = GetModuleHandle(NULL);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
812 WNDCLASS wc;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
813 if(arg)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
814 {
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
815 if(strstr(arg,"noaccel"))
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
816 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
817 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
818 nooverlay = 1;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
819 }
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
820 if(strstr(arg,"ontop"))
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
821 {
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
822 mp_msg(MSGT_VO,MSGL_V,"<vo_directx><INFO>window ontop\n");
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
823 ontop = 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
824 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
825 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
826 if (Directx_InitDirectDraw()!= 0)return 1; //init DirectDraw
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
827 if (Directx_CheckPrimaryPixelformat()!=0)return 1;
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
828 if (!nooverlay && Directx_CheckOverlayPixelformats() == 0) //check for supported hardware
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
829 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
830 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
831 nooverlay = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
832 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
833 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
834 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
835 mp_msg(MSGT_VO, MSGL_V ,"<vo_directx><INFO>using backpuffer\n");
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
836 nooverlay = 1;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
837 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
838 wc.style = CS_HREDRAW | CS_VREDRAW;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
839 wc.lpfnWndProc = WndProc;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
840 wc.cbClsExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
841 wc.cbWndExtra = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
842 wc.hInstance = hInstance;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
843 wc.hCursor = LoadCursor(NULL,IDC_ARROW);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
844 wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
845 wc.hbrBackground = CreateSolidBrush(windowcolor);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
846 wc.lpszClassName = "Mplayer - Movieplayer for Linux";
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
847 wc.lpszMenuName = NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
848 RegisterClass(&wc);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
849 hWnd = CreateWindow("MPlayer - Movieplayer for Linux",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
850 "",
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
851 WS_OVERLAPPEDWINDOW| WS_SIZEBOX,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
852 CW_USEDEFAULT, //position x
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
853 CW_USEDEFAULT, //position y
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
854 100, //width
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
855 100, //height
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
856 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
857 NULL,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
858 hInstance,
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
859 NULL);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
860 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
861 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
862 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
865 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
866 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
867 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
868 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
869 uint32_t i=0, uvstride=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
870 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
871 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
872 s=src[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
873 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
874 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
875 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
876 d+=dstride;
7537
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
879 w/=2;h/=2;x/=2;y/=2;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
880
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
881 // copy U
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
882 d=image+dstride*image_height + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
883 if(image_format == IMGFMT_YV12)s=src[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
884 else s=src[1];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
885 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
886 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
887 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
888 d+=uvstride;
7537
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
891 // copy V
8490
ac40496c7d9e 1000l! I have no idea how this code worked at all before. I guess no
rfelker
parents: 8148
diff changeset
892 d=image+dstride*image_height +uvstride*(image_height/2) + uvstride*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
893 if(image_format == IMGFMT_YV12)s=src[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
894 else s=src[2];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
895 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
896 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
897 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
898 d+=uvstride;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
899 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
900 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
903 static void flip_page(void)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
904 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
905 HRESULT dxresult;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
906 g_lpddsBack->lpVtbl->Unlock (g_lpddsBack,NULL);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
907 if (vo_doublebuffering)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
908 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
909 // flip to the next image in the sequence
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
910 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
911 if(dxresult == DDERR_SURFACELOST)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
912 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
913 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
914 g_lpddsBack->lpVtbl->Restore( g_lpddsBack );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
915 dxresult = g_lpddsOverlay->lpVtbl->Flip( g_lpddsOverlay,NULL, DDFLIP_WAIT);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
916 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
917 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
918 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
919 if(nooverlay)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
920 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
921 DDBLTFX ddbltfx;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
922 // ask for the "NOTEARING" option
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
923 memset( &ddbltfx, 0, sizeof(DDBLTFX) );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
924 ddbltfx.dwSize = sizeof(DDBLTFX);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
925 ddbltfx.dwDDFX = DDBLTFX_NOTEARING;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
926 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
927 }
8495
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
928 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
929 dstride = ddsdsf.lPitch;
a23489e72ef0 10l - my system is very tolerant it seems
faust3
parents: 8490
diff changeset
930 image = ddsdsf.lpSurface;
7537
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
933 static uint32_t draw_frame(uint8_t *src[])
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
934 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
935 memcpy( image, *src, dstride * image_height );
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
936 return 0;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
939 static uint32_t get_image(mp_image_t *mpi)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
940 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
941 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
942 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
943 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
944 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
945 if(mpi->flags&MP_IMGFLAG_PLANAR)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
946 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
947 if(image_format == IMGFMT_YV12)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
948 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
949 mpi->planes[2]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
950 mpi->planes[1]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
951 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
952 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
953 else if(image_format == IMGFMT_IYUV || image_format == IMGFMT_I420)
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
954 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
955 mpi->planes[1]= image + dstride*image_height;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
956 mpi->planes[2]= image + dstride*image_height+ dstride*image_height/4;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
957 mpi->stride[1]=mpi->stride[2]=dstride/2;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
958 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
959 else if(image_format == IMGFMT_YVU9)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
960 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
961 mpi->planes[2] = image + dstride*image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
962 mpi->planes[1] = image + dstride*image_height+ dstride*image_height/16;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
963 mpi->stride[1]=mpi->stride[2]=dstride/4;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
964 }
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
965 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
966 mpi->planes[0]=image;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
967 mpi->stride[0]=dstride;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
968 mpi->width=image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
969 mpi->height=image_height;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
970 mpi->flags|=MP_IMGFLAG_DIRECT;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
971 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
972 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
973 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
974 return VO_FALSE;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
977 static uint32_t put_image(mp_image_t *mpi){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
978
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
979 uint32_t i = 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
980 uint8_t *d;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
981 uint8_t *s;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
982 uint32_t x = mpi->x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
983 uint32_t y = mpi->y;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
984 uint32_t w = mpi->w;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
985 uint32_t h = mpi->h;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
986
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
987 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
988 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
989 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
990 return VO_TRUE;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
993 if (mpi->flags&MP_IMGFLAG_PLANAR)
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
994 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
995
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
996 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
997 else
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
998 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
999 // copy Y
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1000 d=image+dstride*y+x;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1001 s=mpi->planes[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1002 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1003 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1004 s+=mpi->stride[0];
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1005 d+=dstride;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1006 }
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1007 w/=4;h/=4;x/=4;y/=4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1008 // copy V
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1009 d=image+dstride*image_height + dstride*y/4+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1010 s=mpi->planes[2];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1011 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1012 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1013 s+=mpi->stride[1];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1014 d+=dstride/4;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1015 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1016 // copy U
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1017 d=image+dstride*image_height + dstride*image_height/16 + dstride/4*y+x;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1018 s=mpi->planes[1];
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1019 for(i=0;i<h;i++){
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1020 memcpy(d,s,w);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1021 s+=mpi->stride[2];
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1022 d+=dstride/4;
7537
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 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1026 else //packed
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1027 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1028 memcpy( image, mpi->planes[0], image_height * dstride);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1029 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1030 return VO_TRUE;
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
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1033 static uint32_t
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1034 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
1035 {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1036 fs = options & 0x01;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1037 vm = options & 0x02;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1038 image_format = format;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1039 image_width = width;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1040 image_height = height;
8519
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1041 d_image_width = d_width;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1042 d_image_height = d_height;
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1043 aspect_save_orig(image_width,image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1044 aspect_save_prescale(d_image_width,d_image_height);
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1045 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
ebd7934c8f1f 10l and correct aspect
faust3
parents: 8495
diff changeset
1046 aspect(&d_image_width,&d_image_height,A_NOZOOM);
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1047 SetWindowText(hWnd,title);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1048 /*release all surfaces*/
7682
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1049 if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1050 g_lpddsBack = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1051 if(vo_doublebuffering)
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1052 {
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1053 if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1054 }
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1055 g_lpddsOverlay = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1056 if (g_lpddsPrimary != NULL) g_lpddsPrimary->lpVtbl->Release(g_lpddsPrimary);
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1057 g_lpddsPrimary = NULL;
71758531a52d -fixes vo_directx to work with -fixed-vo
arpi
parents: 7624
diff changeset
1058 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>overlay surfaces released\n");
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1059 /*set cooperativelevel*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1060 if(vm) /*exclusive mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1061 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1062 fs=1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1063 if (g_lpdd->lpVtbl->SetCooperativeLevel(g_lpdd, hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1064 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1065 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
1066 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1067 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1068 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1069 /*SetDisplayMode(ddobject,width,height,bpp,refreshrate,aditionalflags)*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1070 if(g_lpdd->lpVtbl->SetDisplayMode(g_lpdd,640, 480, 16,0,0) != DD_OK)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1071 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1072 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
1073 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1074 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1075 aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1076 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
1077 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1078 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1079 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1080 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
1081 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1082 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
1083 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1084 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1085 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
1086 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1087 if(fs)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1088 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1089 /*remove the borders*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1090 SetWindowLong( hWnd, GWL_STYLE, 0 );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1091 /*change backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1092 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1093 /*repaint*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1094 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1095 /*hide mouse*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1096 ShowCursor(FALSE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1097 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1098 /*create the surfaces*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1099 if(Directx_CreatePrimarySurface())return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1100 if (!nooverlay && Directx_CreateOverlay(image_format))
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1101 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1102 nooverlay=1; /*overlay creation failed*/
9728
df23774c0468 10l: don't change image format during config
faust3
parents: 9619
diff changeset
1103 mp_msg(MSGT_VO, MSGL_FATAL,"<vo_directx><FATAL ERROR>can't use overlay mode: please use -vo directx:noaccel\n");
df23774c0468 10l: don't change image format during config
faust3
parents: 9619
diff changeset
1104 return 1;
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1105 }
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1106 if(nooverlay)
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1107 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1108 if(Directx_CreateBackpuffer())
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1109 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1110 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
1111 return 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1112 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1113 mp_msg(MSGT_VO, MSGL_V,"<vo_directx><INFO>back surface created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1114 vo_doublebuffering = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1115 /*create clipper for nonoverlay mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1116 if(g_lpddclipper)g_lpddclipper->lpVtbl->Release(g_lpddclipper);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1117 g_lpddclipper=NULL;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1118 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
1119 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
1120 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
1121 mp_msg(MSGT_VO, MSGL_DBG3,"<vo_directx><INFO>clipper succesfully created\n");
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1122 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1123 Directx_ManageDisplay(d_image_width,d_image_height);
7537
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1124 memset(&ddsdsf, 0,sizeof(DDSURFACEDESC));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1125 ddsdsf.dwSize = sizeof (DDSURFACEDESC);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1126 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
1127 dstride = ddsdsf.lPitch;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1128 image = ddsdsf.lpSurface;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1129 return 0;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1130 }
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 static uint32_t control(uint32_t request, void *data, ...)
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 switch (request) {
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1135
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1136 case VOCTRL_GET_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1137 return get_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1138 case VOCTRL_QUERY_FORMAT:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1139 return query_format(*((uint32_t*)data));
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1140 case VOCTRL_DRAW_IMAGE:
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1141 return put_image(data);
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1142 case VOCTRL_FULLSCREEN:
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 if(vm)
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 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
1147 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1148 else
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1149 {
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1150 WINDOWPLACEMENT window_placement;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1151 uint32_t width = 0; /*default: restore to the size it had before maximizing*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1152 uint32_t height = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1153 window_placement.length = sizeof(WINDOWPLACEMENT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1154 GetWindowPlacement(hWnd, &window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1155 if(fs) /*go to windowed*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1156 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1157 fs = 0;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1158 /*prevent the screen being filled with garbage*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1159 window_placement.showCmd = SW_SHOWMINIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1160 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1161 /*change style and restore the window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1162 SetWindowLong(hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW|WS_SIZEBOX);
9488
abe81caa8cc1 fix fullscreenswitching patch by Joey Parrish <joey at nicewarrior.org>
faust3
parents: 9380
diff changeset
1163 window_placement.showCmd = SW_RESTORE;
8667
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1164 SetWindowPlacement(hWnd,&window_placement );
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1165 /*restore backgroundcolor*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1166 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(windowcolor));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1167 /*never ever make a big window*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1168 if(((window_placement.rcNormalPosition.bottom - window_placement.rcNormalPosition.top)==GetSystemMetrics(SM_CYSCREEN))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1169 &&((window_placement.rcNormalPosition.right - window_placement.rcNormalPosition.left)==GetSystemMetrics(SM_CXSCREEN)))
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1170 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1171 width = d_image_width;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1172 height = d_image_height;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1173 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1174 /*show cursor again*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1175 ShowCursor(TRUE);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1176 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1177 else /*go to fullscreen*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1178 {
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1179 fs = 1;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1180 /*remove decoration and maximize*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1181 SetWindowLong(hWnd,GWL_STYLE,0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1182 window_placement.showCmd = SW_SHOWMAXIMIZED;
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1183 SetWindowPlacement(hWnd,&window_placement);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1184 /*make the window really black*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1185 SetClassLongA(hWnd,GCL_HBRBACKGROUND,(int)CreateSolidBrush(RGB(0,0,0)));
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1186 /*hide mouse cursor in fullscreen mode*/
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1187 if(ShowCursor(FALSE)<0);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1188 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
1189 }
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1190 RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_INTERNALPAINT);
7753ba3fdb15 fullscreencode rewritten, some cleanup
faust3
parents: 8519
diff changeset
1191 Directx_ManageDisplay(width,height);
7537
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 return VO_TRUE;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1194 }
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1195 };
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1196 return VO_NOTIMPL;
719bb52b987a argh i forgot to add new file..
arpi
parents:
diff changeset
1197 }