Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
0bff18c4
Kaydet (Commit)
0bff18c4
authored
May 29, 2014
tarafından
Zolnai Tamás
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
OGLWindow: use reference instead of pointer
Change-Id: I72ef9570ac9e7b4cb4afc2319725743098722d31
üst
c1e1576d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
44 deletions
+46
-44
oglplayer.cxx
avmedia/source/opengl/oglplayer.cxx
+2
-1
oglwindow.cxx
avmedia/source/opengl/oglwindow.cxx
+40
-39
oglwindow.hxx
avmedia/source/opengl/oglwindow.hxx
+4
-4
No files found.
avmedia/source/opengl/oglplayer.cxx
Dosyayı görüntüle @
0bff18c4
...
...
@@ -242,6 +242,7 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
SAL_WARN
(
"avmedia.opengl"
,
"Failed to get the SystemChildWindow for rendering!"
);
return
uno
::
Reference
<
media
::
XPlayerWindow
>
();
}
assert
(
pChildWindow
->
GetParent
());
if
(
!
m_aContext
.
init
(
pChildWindow
)
)
{
...
...
@@ -264,7 +265,7 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
SAL_WARN
(
"avmedia.opengl"
,
"Error occured while parsing *.json file! Error code: "
<<
nRet
);
return
uno
::
Reference
<
media
::
XPlayerWindow
>
();
}
m_pOGLWindow
=
new
OGLWindow
(
m_pHandle
,
&
m_aContext
,
pChildWindow
);
m_pOGLWindow
=
new
OGLWindow
(
*
m_pHandle
,
m_aContext
,
*
pChildWindow
->
GetParent
()
);
return
uno
::
Reference
<
media
::
XPlayerWindow
>
(
m_pOGLWindow
);
}
...
...
avmedia/source/opengl/oglwindow.cxx
Dosyayı görüntüle @
0bff18c4
...
...
@@ -14,10 +14,10 @@ using namespace com::sun::star;
namespace
avmedia
{
namespace
ogl
{
OGLWindow
::
OGLWindow
(
glTFHandle
*
pHandle
,
OpenGLContext
*
pContext
,
SystemChildWindow
*
pChildWindow
)
:
m_
pHandle
(
p
Handle
)
,
m_
pContext
(
p
Context
)
,
m_
pEventHandler
(
pChildWindow
->
GetParent
()
)
OGLWindow
::
OGLWindow
(
glTFHandle
&
rHandle
,
OpenGLContext
&
rContext
,
Window
&
rEventHandlerParent
)
:
m_
rHandle
(
r
Handle
)
,
m_
rContext
(
r
Context
)
,
m_
rEventHandler
(
rEventHandlerParent
)
,
m_bVisible
(
false
)
,
meZoomLevel
(
media
::
ZoomLevel_ORIGINAL
)
,
m_aLastMousePos
(
Point
())
...
...
@@ -31,11 +31,11 @@ OGLWindow::~OGLWindow()
void
SAL_CALL
OGLWindow
::
update
()
throw
(
css
::
uno
::
RuntimeException
,
std
::
exception
)
{
m_
pContext
->
makeCurrent
();
gltf_prepare_renderer
(
m_p
Handle
);
gltf_renderer
(
m_p
Handle
);
gltf_complete_renderer
(
m_p
Handle
);
m_
pContext
->
swapBuffers
();
m_
rContext
.
makeCurrent
();
gltf_prepare_renderer
(
&
m_r
Handle
);
gltf_renderer
(
&
m_r
Handle
);
gltf_complete_renderer
(
&
m_r
Handle
);
m_
rContext
.
swapBuffers
();
}
sal_Bool
SAL_CALL
OGLWindow
::
setZoomLevel
(
css
::
media
::
ZoomLevel
eZoomLevel
)
throw
(
css
::
uno
::
RuntimeException
,
std
::
exception
)
...
...
@@ -83,8 +83,9 @@ uno::Sequence< OUString > SAL_CALL OGLWindow::getSupportedServiceNames() throw (
void
SAL_CALL
OGLWindow
::
dispose
()
throw
(
uno
::
RuntimeException
,
std
::
exception
)
{
m_pEventHandler
->
GetParent
()
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_pEventHandler
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
assert
(
m_rEventHandler
.
GetParent
());
m_rEventHandler
.
GetParent
()
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_rEventHandler
.
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
}
void
SAL_CALL
OGLWindow
::
addEventListener
(
const
uno
::
Reference
<
lang
::
XEventListener
>&
)
...
...
@@ -100,14 +101,14 @@ void SAL_CALL OGLWindow::removeEventListener( const uno::Reference< lang::XEvent
void
SAL_CALL
OGLWindow
::
setPosSize
(
sal_Int32
nX
,
sal_Int32
nY
,
sal_Int32
nWidth
,
sal_Int32
nHeight
,
sal_Int16
/*nFlags*/
)
throw
(
uno
::
RuntimeException
,
std
::
exception
)
{
if
(
m_
pHandle
->
viewport
.
x
!=
nX
||
m_pHandle
->
viewport
.
x
!=
nY
||
m_
pHandle
->
viewport
.
width
!=
nWidth
||
m_pHandle
->
viewport
.
height
!=
nHeight
)
if
(
m_
rHandle
.
viewport
.
x
!=
nX
||
m_rHandle
.
viewport
.
x
!=
nY
||
m_
rHandle
.
viewport
.
width
!=
nWidth
||
m_rHandle
.
viewport
.
height
!=
nHeight
)
{
m_
pContext
->
setWinSize
(
Size
(
nWidth
,
nHeight
));
m_
pHandle
->
viewport
.
x
=
nX
;
m_
pHandle
->
viewport
.
y
=
nY
;
m_
pHandle
->
viewport
.
width
=
nWidth
;
m_
pHandle
->
viewport
.
height
=
nHeight
;
m_
rContext
.
setWinSize
(
Size
(
nWidth
,
nHeight
));
m_
rHandle
.
viewport
.
x
=
nX
;
m_
rHandle
.
viewport
.
y
=
nY
;
m_
rHandle
.
viewport
.
width
=
nWidth
;
m_
rHandle
.
viewport
.
height
=
nHeight
;
if
(
m_bVisible
)
{
update
();
...
...
@@ -118,24 +119,25 @@ void SAL_CALL OGLWindow::setPosSize( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidt
awt
::
Rectangle
SAL_CALL
OGLWindow
::
getPosSize
()
throw
(
uno
::
RuntimeException
,
std
::
exception
)
{
return
awt
::
Rectangle
(
m_
pHandle
->
viewport
.
x
,
m_pHandle
->
viewport
.
y
,
m_
pHandle
->
viewport
.
width
,
m_pHandle
->
viewport
.
height
);
return
awt
::
Rectangle
(
m_
rHandle
.
viewport
.
x
,
m_rHandle
.
viewport
.
y
,
m_
rHandle
.
viewport
.
width
,
m_rHandle
.
viewport
.
height
);
}
void
SAL_CALL
OGLWindow
::
setVisible
(
sal_Bool
bSet
)
throw
(
uno
::
RuntimeException
,
std
::
exception
)
{
assert
(
m_rEventHandler
.
GetParent
());
if
(
bSet
&&
!
m_bVisible
)
{
update
();
m_
pEventHandler
->
GetParent
()
->
AddEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_
pEventHandler
->
AddEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
m_
pEventHandler
->
GrabFocus
();
m_
rEventHandler
.
GetParent
()
->
AddEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_
rEventHandler
.
AddEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
m_
rEventHandler
.
GrabFocus
();
}
else
if
(
!
bSet
)
{
m_
pEventHandler
->
GetParent
()
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_
pEventHandler
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
m_
rEventHandler
.
GetParent
()
->
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
FocusGrabber
));
m_
rEventHandler
.
RemoveEventListener
(
LINK
(
this
,
OGLWindow
,
CameraHandler
));
}
m_bVisible
=
bSet
;
}
...
...
@@ -212,26 +214,25 @@ void SAL_CALL OGLWindow::removePaintListener( const uno::Reference< awt::XPaintL
IMPL_LINK
(
OGLWindow
,
FocusGrabber
,
VclWindowEvent
*
,
pEvent
)
{
assert
(
m_pEventHandler
);
if
(
pEvent
->
GetId
()
==
VCLEVENT_WINDOW_MOUSEMOVE
)
{
MouseEvent
*
pMouseEvt
=
(
MouseEvent
*
)
pEvent
->
GetData
();
if
(
pMouseEvt
)
{
const
Point
&
rMousePos
=
pMouseEvt
->
GetPosPixel
();
const
Rectangle
aWinRect
(
m_
pEventHandler
->
GetPosPixel
(),
m_pEventHandler
->
GetSizePixel
());
const
Rectangle
aWinRect
(
m_
rEventHandler
.
GetPosPixel
(),
m_rEventHandler
.
GetSizePixel
());
// Grab focus to the OpenGL window when mouse pointer is over it
if
(
aWinRect
.
IsInside
(
rMousePos
)
)
{
if
(
!
m_
pEventHandler
->
HasFocus
()
)
if
(
!
m_
rEventHandler
.
HasFocus
()
)
{
m_
pEventHandler
->
GrabFocus
();
m_
rEventHandler
.
GrabFocus
();
}
}
// Move focus to the document when mouse is not over the OpenGL window
else
if
(
m_
pEventHandler
->
HasFocus
()
)
else
if
(
m_
rEventHandler
.
HasFocus
()
)
{
m_
pEventHandler
->
GrabFocusToDocument
();
m_
rEventHandler
.
GrabFocusToDocument
();
}
}
}
...
...
@@ -257,8 +258,8 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
glm
::
vec3
vEye
;
glm
::
vec3
vView
;
glm
::
vec3
vUp
;
gltf_get_camera_pos
(
m_p
Handle
,
&
vEye
,
&
vView
,
&
vUp
);
float
fModelSize
=
(
float
)
gltf_get_model_size
(
m_p
Handle
);
gltf_get_camera_pos
(
&
m_r
Handle
,
&
vEye
,
&
vView
,
&
vUp
);
float
fModelSize
=
(
float
)
gltf_get_model_size
(
&
m_r
Handle
);
glm
::
vec3
vMove
=
vView
-
vEye
;
vMove
=
glm
::
normalize
(
vMove
);
...
...
@@ -277,7 +278,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
if
(
nCode
==
KEY_W
)
vMoveBy
-=
vMup
*
(
0.0005
f
*
fModelSize
);
if
(
nCode
==
KEY_S
)
vMoveBy
+=
vMup
*
(
0.0005
f
*
fModelSize
);
}
gltf_renderer_move_camera
(
m_p
Handle
,
vMoveBy
.
x
,
vMoveBy
.
y
,
vMoveBy
.
z
,
0.0
);
gltf_renderer_move_camera
(
&
m_r
Handle
,
vMoveBy
.
x
,
vMoveBy
.
y
,
vMoveBy
.
z
,
0.0
);
update
();
}
}
...
...
@@ -293,7 +294,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
nCode
==
KEY_A
||
nCode
==
KEY_D
||
nCode
==
KEY_W
||
nCode
==
KEY_S
)
{
gltf_renderer_move_camera
(
m_p
Handle
,
0.0
,
0.0
,
0.0
,
0.0
);
gltf_renderer_move_camera
(
&
m_r
Handle
,
0.0
,
0.0
,
0.0
,
0.0
);
}
}
}
...
...
@@ -307,15 +308,15 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
}
else
if
(
pEvent
->
GetId
()
==
VCLEVENT_WINDOW_MOUSEMOVE
)
{
if
(
!
m_
pEventHandler
->
HasFocus
()
)
if
(
!
m_
rEventHandler
.
HasFocus
()
)
{
m_
pEventHandler
->
GrabFocus
();
m_
rEventHandler
.
GrabFocus
();
}
MouseEvent
*
pMouseEvt
=
(
MouseEvent
*
)
pEvent
->
GetData
();
if
(
pMouseEvt
&&
pMouseEvt
->
IsLeft
())
{
const
Point
&
aCurPos
=
pMouseEvt
->
GetPosPixel
();
float
fSensitivity
=
std
::
min
(
m_
pHandle
->
viewport
.
width
,
m_pHandle
->
viewport
.
height
);
float
fSensitivity
=
std
::
min
(
m_
rHandle
.
viewport
.
width
,
m_rHandle
.
viewport
.
height
);
if
(
fSensitivity
==
0.0
)
fSensitivity
=
1.0
;
else
...
...
@@ -324,7 +325,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
long
nDeltaX
=
m_aLastMousePos
.
X
()
-
aCurPos
.
X
();
long
nDeltaY
=
aCurPos
.
Y
()
-
m_aLastMousePos
.
Y
();
// TODO: It seems this method just moves the camera but not rotate it.
gltf_renderer_rotate_camera
(
m_p
Handle
,
(
float
)
nDeltaX
*
fSensitivity
,
(
float
)
nDeltaY
*
fSensitivity
,
0.0
,
0.0
);
gltf_renderer_rotate_camera
(
&
m_r
Handle
,
(
float
)
nDeltaX
*
fSensitivity
,
(
float
)
nDeltaY
*
fSensitivity
,
0.0
,
0.0
);
update
();
m_aLastMousePos
=
aCurPos
;
...
...
avmedia/source/opengl/oglwindow.hxx
Dosyayı görüntüle @
0bff18c4
...
...
@@ -27,7 +27,7 @@ class OGLWindow : public ::cppu::WeakImplHelper2 < com::sun::star::media::XPlaye
com
::
sun
::
star
::
lang
::
XServiceInfo
>
{
public
:
OGLWindow
(
glTFHandle
*
pHandle
,
OpenGLContext
*
pContext
,
SystemChildWindow
*
pChildWindow
);
OGLWindow
(
glTFHandle
&
rHandle
,
OpenGLContext
&
rContext
,
Window
&
rEventHandlerParent
);
virtual
~
OGLWindow
();
virtual
void
SAL_CALL
update
()
throw
(
com
::
sun
::
star
::
uno
::
RuntimeException
,
std
::
exception
)
SAL_OVERRIDE
;
...
...
@@ -65,9 +65,9 @@ private:
DECL_LINK
(
FocusGrabber
,
VclWindowEvent
*
);
DECL_LINK
(
CameraHandler
,
VclWindowEvent
*
);
glTFHandle
*
m_p
Handle
;
OpenGLContext
*
m_p
Context
;
Window
*
m_p
EventHandler
;
glTFHandle
&
m_r
Handle
;
OpenGLContext
&
m_r
Context
;
Window
&
m_r
EventHandler
;
bool
m_bVisible
;
com
::
sun
::
star
::
media
::
ZoomLevel
meZoomLevel
;
Point
m_aLastMousePos
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment