Changeset 41404 in vbox for trunk/src/VBox/HostServices/SharedOpenGL
- Timestamp:
- May 22, 2012 4:41:38 PM (13 years ago)
- Location:
- trunk/src/VBox/HostServices/SharedOpenGL
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
r41128 r41404 1133 1133 rc = VINF_SUCCESS; 1134 1134 } 1135 break; 1136 } 1137 case SHCRGL_HOST_FN_VIEWPORT_CHANGED: 1138 { 1139 Log(("svcCall: SHCRGL_HOST_FN_VIEWPORT_CHANGED\n")); 1140 1141 /* Verify parameter count and types. */ 1142 if (cParms != SHCRGL_CPARMS_VIEWPORT_CHANGED) 1143 { 1144 LogRel(("SHCRGL_HOST_FN_VIEWPORT_CHANGED: cParms invalid - %d", cParms)); 1145 rc = VERR_INVALID_PARAMETER; 1146 break; 1147 } 1148 1149 for (int i = 0; i < SHCRGL_CPARMS_VIEWPORT_CHANGED; ++i) 1150 { 1151 if (paParms[i].type != VBOX_HGCM_SVC_PARM_32BIT) 1152 { 1153 LogRel(("SHCRGL_HOST_FN_VIEWPORT_CHANGED: param[%d] type invalid - %d", i, paParms[i].type)); 1154 rc = VERR_INVALID_PARAMETER; 1155 break; 1156 } 1157 } 1158 1159 if (!RT_SUCCESS(rc)) 1160 { 1161 LogRel(("SHCRGL_HOST_FN_VIEWPORT_CHANGED: param validation failed, returning..")); 1162 break; 1163 } 1164 1165 rc = crVBoxServerSetScreenViewport((int)paParms[0].u.uint32, 1166 paParms[1].u.uint32, /* x */ 1167 paParms[2].u.uint32, /* y */ 1168 paParms[3].u.uint32, /* w */ 1169 paParms[4].u.uint32 /* h */); 1170 if (!RT_SUCCESS(rc)) 1171 { 1172 LogRel(("SHCRGL_HOST_FN_VIEWPORT_CHANGED: crVBoxServerSetScreenViewport failed, rc %d", rc)); 1173 break; 1174 } 1175 1135 1176 break; 1136 1177 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c
r41380 r41404 1389 1389 } 1390 1390 1391 static void crVBoxServerUpdateScreenViewportCB(unsigned long key, void *data1, void *data2) 1392 { 1393 CRMuralInfo *mural = (CRMuralInfo*) data1; 1394 int *sIndex = (int*) data2; 1395 1396 if (mural->screenId != sIndex) 1397 return; 1398 1399 if (!mural->width || !mural->height) 1400 return; 1401 1402 crServerCheckMuralGeometry(mural); 1403 } 1404 1405 1406 DECLEXPORT(int32_t) crVBoxServerSetScreenViewport(int sIndex, int32_t x, int32_t y, uint32_t w, uint32_t h) 1407 { 1408 CRScreenViewportInfo *pVieport; 1409 GLboolean fPosChanged, fSizeChanged; 1410 1411 crDebug("crVBoxServerSetScreenViewport(%i)", sIndex); 1412 1413 if (sIndex<0 || sIndex>=cr_server.screenCount) 1414 { 1415 crWarning("crVBoxServerSetScreenViewport: invalid screen id %d", sIndex); 1416 return VERR_INVALID_PARAMETER; 1417 } 1418 1419 pVieport = &cr_server.screenVieport[sIndex]; 1420 fPosChanged = (pVieport->x != x || pVieport->y != y); 1421 fSizeChanged = (pVieport->w != w || pVieport->h != h); 1422 1423 if (!fPosChanged && !fSizeChanged) 1424 { 1425 crDebug("crVBoxServerSetScreenViewport: no changes"); 1426 return; 1427 } 1428 1429 if (fPosChanged) 1430 { 1431 pVieport->x = x; 1432 pVieport->y = y; 1433 1434 crHashtableWalk(cr_server.muralTable, crVBoxServerUpdateScreenViewportCB, NULL); 1435 } 1436 1437 if (fSizeChanged) 1438 { 1439 pVieport->w = w; 1440 pVieport->h = h; 1441 1442 /* no need to do anything here actually */ 1443 } 1444 return VINF_SUCCESS; 1445 } 1446 1391 1447 1392 1448 #ifdef VBOX_WITH_CRHGSMI -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_muralfbo.c
r41258 r41404 103 103 if (cr_server.screenCount<2 && !cr_server.bForceOffscreenRendering) 104 104 { 105 CRScreenViewportInfo *pVieport = &cr_server.screenVieport[mural->screenId]; 105 106 CRASSERT(cr_server.screenCount>0); 106 107 … … 108 109 mural->hY = mural->gY-cr_server.screen[0].y; 109 110 110 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX , mural->hY);111 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX - pVieport->x, mural->hY - pVieport->y); 111 112 112 113 return; … … 157 158 if (overlappingScreenCount<2 && !cr_server.bForceOffscreenRendering) 158 159 { 160 CRScreenViewportInfo *pVieport = &cr_server.screenVieport[mural->screenId]; 161 159 162 if (mural->bUseFBO) 160 163 { … … 163 166 } 164 167 165 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX , mural->hY);168 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX - pVieport->x, mural->hY - pVieport->y); 166 169 } 167 170 else … … 193 196 if (!mural->bUseFBO) 194 197 { 195 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX, mural->hY); 198 CRScreenViewportInfo *pVieport = &cr_server.screenVieport[mural->screenId]; 199 200 cr_server.head_spu->dispatch_table.WindowPosition(mural->spuWindow, mural->hX - pVieport->x, mural->hY - pVieport->y); 196 201 } 197 202 }
Note:
See TracChangeset
for help on using the changeset viewer.