Changeset 22307 in vbox for trunk/src/VBox/Frontends
- Timestamp:
- Aug 17, 2009 7:56:39 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 51181
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/include/VBoxFrameBuffer.h
r22276 r22307 117 117 QRegion mReg; 118 118 }; 119 120 #ifdef VBOX_GUI_USE_QGL121 typedef enum122 {123 VBOXVHWA_PIPECMD_PAINT = 1,124 VBOXVHWA_PIPECMD_VHWA,125 VBOXVHWA_PIPECMD_OP,126 }VBOXVHWA_PIPECMD_TYPE;127 128 typedef DECLCALLBACK(void) FNVBOXVHWACALLBACK(void * pContext);129 typedef FNVBOXVHWACALLBACK *PFNVBOXVHWACALLBACK;130 131 typedef struct VBOXVHWACALLBACKINFO132 {133 PFNVBOXVHWACALLBACK pfnCallback;134 void * pContext;135 }VBOXVHWACALLBACKINFO;136 class VBoxVHWACommandElement137 {138 public:139 void setVHWACmd(struct _VBOXVHWACMD * pCmd)140 {141 mType = VBOXVHWA_PIPECMD_VHWA;142 u.mpCmd = pCmd;143 }144 145 void setPaintCmd(const QRect & aRect)146 {147 mType = VBOXVHWA_PIPECMD_PAINT;148 mRect = aRect;149 }150 151 void setOp(const VBOXVHWACALLBACKINFO & aOp)152 {153 mType = VBOXVHWA_PIPECMD_OP;154 u.mCallback = aOp;155 }156 157 void setData(VBOXVHWA_PIPECMD_TYPE aType, void * pvData)158 {159 switch(aType)160 {161 case VBOXVHWA_PIPECMD_PAINT:162 setPaintCmd(*((QRect*)pvData));163 break;164 case VBOXVHWA_PIPECMD_VHWA:165 setVHWACmd((struct _VBOXVHWACMD *)pvData);166 break;167 case VBOXVHWA_PIPECMD_OP:168 setOp(*((VBOXVHWACALLBACKINFO *)pvData));169 break;170 default:171 Assert(0);172 break;173 }174 }175 176 VBOXVHWA_PIPECMD_TYPE type() const {return mType;}177 const QRect & rect() const {return mRect;}178 struct _VBOXVHWACMD * vhwaCmd() const {return u.mpCmd;}179 const VBOXVHWACALLBACKINFO & op() const {return u.mCallback; }180 181 private:182 VBoxVHWACommandElement * mpNext;183 VBOXVHWA_PIPECMD_TYPE mType;184 union185 {186 struct _VBOXVHWACMD * mpCmd;187 VBOXVHWACALLBACKINFO mCallback;188 }u;189 QRect mRect;190 191 friend class VBoxVHWACommandElementPipe;192 friend class VBoxVHWACommandElementStack;193 friend class VBoxGLWidget;194 };195 196 class VBoxVHWACommandElementPipe197 {198 public:199 VBoxVHWACommandElementPipe() :200 mpFirst(NULL),201 mpLast(NULL)202 {}203 204 void put(VBoxVHWACommandElement *pCmd)205 {206 if(mpLast)207 {208 Assert(mpFirst);209 mpLast->mpNext = pCmd;210 mpLast = pCmd;211 }212 else213 {214 Assert(!mpFirst);215 mpFirst = pCmd;216 mpLast = pCmd;217 }218 pCmd->mpNext= NULL;219 220 }221 222 VBoxVHWACommandElement * detachList()223 {224 if(mpLast)225 {226 VBoxVHWACommandElement * pHead = mpFirst;227 mpFirst = NULL;228 mpLast = NULL;229 return pHead;230 }231 return NULL;232 }233 private:234 VBoxVHWACommandElement *mpFirst;235 VBoxVHWACommandElement *mpLast;236 };237 238 class VBoxVHWACommandElementStack239 {240 public:241 VBoxVHWACommandElementStack() :242 mpFirst(NULL) {}243 244 void push(VBoxVHWACommandElement *pCmd)245 {246 pCmd->mpNext = mpFirst;247 mpFirst = pCmd;248 }249 250 void pusha(VBoxVHWACommandElement *pFirst, VBoxVHWACommandElement *pLast)251 {252 pLast->mpNext = mpFirst;253 mpFirst = pFirst;254 }255 256 VBoxVHWACommandElement * pop()257 {258 if(mpFirst)259 {260 VBoxVHWACommandElement * ret = mpFirst;261 mpFirst = ret->mpNext;262 return ret;263 }264 return NULL;265 }266 private:267 VBoxVHWACommandElement *mpFirst;268 };269 270 class VBoxVHWACommandProcessEvent : public QEvent271 {272 public:273 VBoxVHWACommandProcessEvent (VBoxVHWACommandElement *pEl)274 : QEvent ((QEvent::Type) VBoxDefs::VHWACommandProcessType)275 {276 mCmdPipe.put(pEl);277 }278 VBoxVHWACommandElementPipe & pipe() { return mCmdPipe; }279 private:280 VBoxVHWACommandElementPipe mCmdPipe;281 VBoxVHWACommandProcessEvent *mpNext;282 283 friend class VBoxGLWidget;284 };285 286 #endif287 119 288 120 ///////////////////////////////////////////////////////////////////////////// … … 406 238 virtual void moveEvent (QMoveEvent * /*me*/ ) {} 407 239 408 #ifdef VBOX_ GUI_USE_QGL240 #ifdef VBOX_WITH_VIDEOHWACCEL 409 241 /* this method is called from the GUI thread 410 * to perform the actual Video HW Acceleration command processing */ 411 virtual void doProcessVHWACommand(VBoxVHWACommandProcessEvent * pEvent); 242 * to perform the actual Video HW Acceleration command processing 243 * the event is framebuffer implementation specific */ 244 virtual void doProcessVHWACommand(QEvent * pEvent); 412 245 #endif 413 246 … … 670 503 const VBoxVHWAColorComponent& b() const {return mB;} 671 504 const VBoxVHWAColorComponent& a() const {return mA;} 505 506 bool equals (const VBoxVHWAColorFormat & other) const; 672 507 673 508 private: … … 1129 964 if(pVga) 1130 965 { 966 Assert(!pVga->getComplexList()); 1131 967 mPrimary.add(pVga); 1132 968 mPrimary.setCurrentVisible(pVga); … … 1146 982 return mPrimary.current(); 1147 983 } 1148 //1149 // void setPrimary(VBoxVHWASurfList * pSurf)1150 // {1151 // mSurfPrimary = pSurf;1152 // }1153 984 1154 985 void addOverlay(VBoxVHWASurfList * pSurf) … … 1208 1039 typedef void (VBoxGLWidget::*PFNVBOXQGLOP)(void* ); 1209 1040 1041 typedef enum 1042 { 1043 VBOXVHWA_PIPECMD_PAINT = 1, 1044 VBOXVHWA_PIPECMD_VHWA, 1045 VBOXVHWA_PIPECMD_OP, 1046 }VBOXVHWA_PIPECMD_TYPE; 1047 1048 typedef struct VBOXVHWACALLBACKINFO 1049 { 1050 VBoxGLWidget *pThis; 1051 PFNVBOXQGLOP pfnCallback; 1052 void * pContext; 1053 }VBOXVHWACALLBACKINFO; 1054 1055 class VBoxVHWACommandElement 1056 { 1057 public: 1058 void setVHWACmd(struct _VBOXVHWACMD * pCmd) 1059 { 1060 mType = VBOXVHWA_PIPECMD_VHWA; 1061 u.mpCmd = pCmd; 1062 } 1063 1064 void setPaintCmd(const QRect & aRect) 1065 { 1066 mType = VBOXVHWA_PIPECMD_PAINT; 1067 mRect = aRect; 1068 } 1069 1070 void setOp(const VBOXVHWACALLBACKINFO & aOp) 1071 { 1072 mType = VBOXVHWA_PIPECMD_OP; 1073 u.mCallback = aOp; 1074 } 1075 1076 void setData(VBOXVHWA_PIPECMD_TYPE aType, void * pvData) 1077 { 1078 switch(aType) 1079 { 1080 case VBOXVHWA_PIPECMD_PAINT: 1081 setPaintCmd(*((QRect*)pvData)); 1082 break; 1083 case VBOXVHWA_PIPECMD_VHWA: 1084 setVHWACmd((struct _VBOXVHWACMD *)pvData); 1085 break; 1086 case VBOXVHWA_PIPECMD_OP: 1087 setOp(*((VBOXVHWACALLBACKINFO *)pvData)); 1088 break; 1089 default: 1090 Assert(0); 1091 break; 1092 } 1093 } 1094 1095 VBOXVHWA_PIPECMD_TYPE type() const {return mType;} 1096 const QRect & rect() const {return mRect;} 1097 struct _VBOXVHWACMD * vhwaCmd() const {return u.mpCmd;} 1098 const VBOXVHWACALLBACKINFO & op() const {return u.mCallback; } 1099 1100 private: 1101 VBoxVHWACommandElement * mpNext; 1102 VBOXVHWA_PIPECMD_TYPE mType; 1103 union 1104 { 1105 struct _VBOXVHWACMD * mpCmd; 1106 VBOXVHWACALLBACKINFO mCallback; 1107 }u; 1108 QRect mRect; 1109 1110 friend class VBoxVHWACommandElementPipe; 1111 friend class VBoxVHWACommandElementStack; 1112 friend class VBoxGLWidget; 1113 }; 1114 1115 class VBoxVHWACommandElementPipe 1116 { 1117 public: 1118 VBoxVHWACommandElementPipe() : 1119 mpFirst(NULL), 1120 mpLast(NULL) 1121 {} 1122 1123 void put(VBoxVHWACommandElement *pCmd) 1124 { 1125 if(mpLast) 1126 { 1127 Assert(mpFirst); 1128 mpLast->mpNext = pCmd; 1129 mpLast = pCmd; 1130 } 1131 else 1132 { 1133 Assert(!mpFirst); 1134 mpFirst = pCmd; 1135 mpLast = pCmd; 1136 } 1137 pCmd->mpNext= NULL; 1138 1139 } 1140 1141 VBoxVHWACommandElement * detachList() 1142 { 1143 if(mpLast) 1144 { 1145 VBoxVHWACommandElement * pHead = mpFirst; 1146 mpFirst = NULL; 1147 mpLast = NULL; 1148 return pHead; 1149 } 1150 return NULL; 1151 } 1152 private: 1153 VBoxVHWACommandElement *mpFirst; 1154 VBoxVHWACommandElement *mpLast; 1155 }; 1156 1157 class VBoxVHWACommandElementStack 1158 { 1159 public: 1160 VBoxVHWACommandElementStack() : 1161 mpFirst(NULL) {} 1162 1163 void push(VBoxVHWACommandElement *pCmd) 1164 { 1165 pCmd->mpNext = mpFirst; 1166 mpFirst = pCmd; 1167 } 1168 1169 void pusha(VBoxVHWACommandElement *pFirst, VBoxVHWACommandElement *pLast) 1170 { 1171 pLast->mpNext = mpFirst; 1172 mpFirst = pFirst; 1173 } 1174 1175 VBoxVHWACommandElement * pop() 1176 { 1177 if(mpFirst) 1178 { 1179 VBoxVHWACommandElement * ret = mpFirst; 1180 mpFirst = ret->mpNext; 1181 return ret; 1182 } 1183 return NULL; 1184 } 1185 private: 1186 VBoxVHWACommandElement *mpFirst; 1187 }; 1188 1210 1189 class VBoxGLWidget : public QGLWidget 1211 1190 { … … 1234 1213 void vboxResizeEvent (VBoxResizeEvent *re) {vboxPerformGLOp(&VBoxGLWidget::vboxDoResize, re);} 1235 1214 1236 void vboxProcessVHWACommands( VBoxVHWACommandProcessEvent * pEvent) {vboxPerformGLOp(&VBoxGLWidget::vboxDoProcessVHWACommands, pEvent);}1215 void vboxProcessVHWACommands(class VBoxVHWACommandProcessEvent * pEvent) {vboxPerformGLOp(&VBoxGLWidget::vboxDoProcessVHWACommands, pEvent);} 1237 1216 #ifdef VBOX_WITH_VIDEOHWACCEL 1238 1217 void vboxVHWACmd (struct _VBOXVHWACMD * pCmd) {vboxPerformGLOp(&VBoxGLWidget::vboxDoVHWACmd, pCmd);} … … 1269 1248 #ifdef VBOX_WITH_VIDEOHWACCEL 1270 1249 void vboxDoVHWACmdExec(void *cmd); 1250 void vboxDoVHWACmdAndFree(void *cmd); 1271 1251 void vboxDoVHWACmd(void *cmd); 1272 1252 … … 1319 1299 void vboxPerformGLOp(PFNVBOXQGLOP pfn, void* pContext) {mpfnOp = pfn; mOpContext = pContext; updateGL();} 1320 1300 1321 /* posts op to UI thread */ 1322 int vboxExecOpSynch(PFNVBOXQGLOP pfn, void* pContext); 1301 // /* posts op to UI thread */ 1302 // int vboxExecOpSynch(PFNVBOXQGLOP pfn, void* pContext); 1303 void vboxExecOnResize(PFNVBOXQGLOP pfn, void* pContext); 1323 1304 1324 1305 void cmdPipeInit(); … … 1326 1307 void vboxDoProcessVHWACommands(void *pContext); 1327 1308 1328 VBoxVHWACommandElement * detachCmdList(VBoxVHWACommandElement * pFirst2Free, VBoxVHWACommandElement * pLast2Free); 1329 VBoxVHWACommandElement * processCmdList(VBoxVHWACommandElement * pCmd); 1330 1331 VBoxVHWASurfaceBase* handle2Surface(uint32_t h) { return (VBoxVHWASurfaceBase*)mSurfHandleTable.get(h); } 1309 class VBoxVHWACommandElement * detachCmdList(class VBoxVHWACommandElement * pFirst2Free, VBoxVHWACommandElement * pLast2Free); 1310 class VBoxVHWACommandElement * processCmdList(class VBoxVHWACommandElement * pCmd); 1311 1312 VBoxVHWASurfaceBase* handle2Surface(uint32_t h) 1313 { 1314 VBoxVHWASurfaceBase* pSurf = (VBoxVHWASurfaceBase*)mSurfHandleTable.get(h); 1315 Assert(pSurf); 1316 return pSurf; 1317 } 1332 1318 1333 1319 VBoxVHWAHandleTable mSurfHandleTable; … … 1338 1324 ulong mPixelFormat; 1339 1325 bool mUsesGuestVRAM; 1340 uint32_t mcVGASurfCreated;1326 bool mbVGASurfCreated; 1341 1327 1342 1328 RTCRITSECT mCritSect; 1343 VBoxVHWACommandProcessEvent *mpFirstEvent;1344 VBoxVHWACommandProcessEvent *mpLastEvent;1329 class VBoxVHWACommandProcessEvent *mpFirstEvent; 1330 class VBoxVHWACommandProcessEvent *mpLastEvent; 1345 1331 bool mbNewEvent; 1346 1332 VBoxVHWACommandElementStack mFreeElements; … … 1351 1337 VBoxVHWASurfList *mConstructingList; 1352 1338 int32_t mcRemaining2Contruct; 1339 1340 /* this is used in saved state restore to postpone surface restoration 1341 * till the framebuffer size is restored */ 1342 VBoxVHWACommandElementPipe mResizePostProcessCmds; 1353 1343 1354 1344 class VBoxVHWAGlProgramMngr *mpMngr; … … 1387 1377 void paintEvent (QPaintEvent *pe); 1388 1378 void resizeEvent (VBoxResizeEvent *re); 1389 void doProcessVHWACommand( VBoxVHWACommandProcessEvent * pEvent);1379 void doProcessVHWACommand(QEvent * pEvent); 1390 1380 1391 1381 private: -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp
r21939 r22307 1333 1333 } 1334 1334 1335 #ifdef VBOX_ GUI_USE_QGL1335 #ifdef VBOX_WITH_VIDEOHWACCEL 1336 1336 case VBoxDefs::VHWACommandProcessType: 1337 1337 { 1338 VBoxVHWACommandProcessEvent *cmde = (VBoxVHWACommandProcessEvent *)e; 1339 mFrameBuf->doProcessVHWACommand(cmde); 1338 mFrameBuf->doProcessVHWACommand(e); 1340 1339 return true; 1341 1340 } -
trunk/src/VBox/Frontends/VirtualBox/src/VBoxFrameBuffer.cpp
r21939 r22307 268 268 } 269 269 270 #ifdef VBOX_GUI_USE_QGL 271 void VBoxFrameBuffer::doProcessVHWACommand(VBoxVHWACommandProcessEvent * pEvent) 272 { 273 // pCommand->rc = VERR_NOT_IMPLEMENTED; 274 // CDisplay display = mView->console().GetDisplay(); 275 // Assert (!display.isNull()); 276 // 277 // display.CompleteVHWACommand((BYTE*)pCommand); 270 #ifdef VBOX_WITH_VIDEOHWACCEL 271 void VBoxFrameBuffer::doProcessVHWACommand(QEvent * pEvent) 272 { 273 /* should never be here */ 274 AssertBreakpoint(); 278 275 } 279 276 #endif
Note:
See TracChangeset
for help on using the changeset viewer.