Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Ludmány Balázs
/
thin-client
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
b53b0657
authored
Jul 27, 2016
by
Ludmány Balázs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reuse buffers
parent
3aeb58bf
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
84 additions
and
92 deletions
+84
-92
ThinClient.pro
+1
-1
ThinClient.pro.user
+1
-1
copy_shader.fsh
+1
-2
copy_shader.vsh
+1
-1
dispatcher.cpp
+7
-8
draw_shader.fsh
+1
-2
draw_shader.vsh
+1
-1
jpegdecoder.cpp
+21
-16
main.cpp
+1
-2
main.qml
+3
-2
qvnc.cpp
+2
-2
qvnc.h
+1
-1
uploader.cpp
+38
-48
uploader.h
+3
-3
vncrenderer.cpp
+2
-2
No files found.
ThinClient.pro
View file @
b53b0657
TEMPLATE
=
app
QT
+=
qml
quick
CONFIG
+=
c
++
1
4
CONFIG
+=
c
++
1
1
ofast
SOURCES
+=
main
.
cpp
\
jpegdecoder
.
cpp
\
...
...
ThinClient.pro.user
View file @
b53b0657
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2016-07-2
6T16:47:48
. -->
<!-- Written by QtCreator 3.5.1, 2016-07-2
7T15:57:27
. -->
<qtcreator>
<data>
<variable>
EnvironmentId
</variable>
...
...
copy_shader.fsh
View file @
b53b0657
...
...
@@ -3,6 +3,5 @@ varying mediump vec2 vartexcoord;
void main(void)
{
gl_FragColor = vec4(texture2D(texture, vartexcoord).rgb, 1.0);
//gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
gl_FragColor = texture2D(texture, vartexcoord);
}
copy_shader.vsh
View file @
b53b0657
...
...
@@ -7,5 +7,5 @@ varying mediump vec2 vartexcoord;
void main(void)
{
gl_Position = vec4((position.x - 1024.0) / 1024.0, (position.y - 1024.0) / 1024.0, 0.0, 1.0);
vartexcoord = vec2(
0.0, 1.0) - vec2(
texcoord.x / 1280.0, texcoord.y / 720.0);
vartexcoord = vec2(texcoord.x / 1280.0, texcoord.y / 720.0);
}
dispatcher.cpp
View file @
b53b0657
...
...
@@ -31,8 +31,7 @@ void Dispatcher::GotBitmap(rfbClient *client, const uint8_t *buffer, int x, int
{
Dispatcher
*
dispatcher
=
(
Dispatcher
*
)
rfbClientGetClientData
(
client
,
0
);
// We have to make a deep copy because libvnc might free the buffer as soon as this function returns
QImage
image
(
buffer
,
w
,
h
,
QImage
::
Format_RGBX8888
);
dispatcher
->
uploader
()
->
gotBitmap
(
image
.
convertToFormat
(
QImage
::
Format_RGB888
),
x
,
y
,
w
,
h
);
dispatcher
->
uploader
()
->
gotBitmap
(
buffer
,
x
,
y
,
w
,
h
);
}
rfbBool
Dispatcher
::
GotJpeg
(
rfbClient
*
client
,
const
uint8_t
*
buffer
,
int
length
,
int
x
,
int
y
,
int
w
,
int
h
)
...
...
@@ -152,6 +151,12 @@ void Dispatcher::refresh()
int
message
=
0
;
if
(
!
HandleRFBServerMessage
(
m_client
))
{
terminate
();
emit
error
();
return
;
}
// Wait until we get something
while
(
message
==
0
)
{
message
=
WaitForMessage
(
m_client
,
1000
);
...
...
@@ -161,12 +166,6 @@ void Dispatcher::refresh()
return
;
}
}
if
(
!
HandleRFBServerMessage
(
m_client
))
{
terminate
();
emit
error
();
return
;
}
}
void
Dispatcher
::
terminate
()
...
...
draw_shader.fsh
View file @
b53b0657
...
...
@@ -4,6 +4,5 @@ varying lowp vec4 varcolor;
void main(void)
{
gl_FragColor = vec4(texture2D(texture, vartexcoord).rgb, 1.0) + varcolor;
// gl_FragColor = vec4(vartexcoord, 0.0, 1.0);
gl_FragColor = vec4(texture2D(texture, vartexcoord).rgb + varcolor.rgb, 1.0);
}
draw_shader.vsh
View file @
b53b0657
...
...
@@ -10,6 +10,6 @@ varying mediump vec2 vartexcoord;
void main(void)
{
gl_Position = ortho * vec4(position, 0.0, 1.0);
varcolor = color
.gggg
;
varcolor = color;
vartexcoord = vec2(texcoord.x / 2048.0, texcoord.y / 2048.0);
}
jpegdecoder.cpp
View file @
b53b0657
...
...
@@ -9,27 +9,32 @@ JpegDecoder::JpegDecoder(ConcurrentQueue<Jpeg *, 256u> *queue, QObject *parent)
void
JpegDecoder
::
operate
()
{
struct
jpeg_decompress_struct
cinfo
;
struct
error_mgr
jerr
;
cinfo
.
err
=
jpeg_std_error
(
&
jerr
.
mgr
);
jerr
.
mgr
.
error_exit
=
error_exit
;
if
(
setjmp
(
jerr
.
setjmp_buffer
))
{
jpeg_destroy_decompress
(
&
cinfo
);
}
jpeg_create_decompress
(
&
cinfo
);
Jpeg
*
jpeg
;
JSAMPLE
*
samples
;
JSAMPROW
*
rows
;
forever
{
jpeg
=
m_queue
->
dequeue
();
struct
jpeg_decompress_struct
cinfo
;
struct
error_mgr
jerr
;
cinfo
.
err
=
jpeg_std_error
(
&
jerr
.
mgr
);
jerr
.
mgr
.
error_exit
=
error_exit
;
if
(
setjmp
(
jerr
.
setjmp_buffer
))
{
jpeg_destroy_decompress
(
&
cinfo
);
}
jpeg_create_decompress
(
&
cinfo
);
cinfo
.
do_fancy_upsampling
=
TRUE
;
cinfo
.
dct_method
=
JDCT_FLOAT
;
jpeg_mem_src
(
&
cinfo
,
jpeg
->
data
,
jpeg
->
length
);
(
void
)
jpeg_read_header
(
&
cinfo
,
TRUE
);
cinfo
.
dct_method
=
JDCT_FASTEST
;
cinfo
.
do_fancy_upsampling
=
FALSE
;
cinfo
.
two_pass_quantize
=
FALSE
;
cinfo
.
dither_mode
=
JDITHER_ORDERED
;
//cinfo.scale_num = 1;
//cinfo.scale_denom = 8;
cinfo
.
out_color_space
=
JCS_EXT_RGBX
;
(
void
)
jpeg_start_decompress
(
&
cinfo
);
JSAMPLE
*
samples
=
new
JSAMPLE
[
cinfo
.
output_width
*
cinfo
.
output_height
*
cinfo
.
output_components
];
JSAMPROW
*
rows
=
new
JSAMPROW
[
cinfo
.
output_height
*
cinfo
.
output_components
];
samples
=
new
JSAMPLE
[
cinfo
.
output_width
*
cinfo
.
output_height
*
cinfo
.
output_components
];
rows
=
new
JSAMPROW
[
cinfo
.
output_height
*
cinfo
.
output_components
];
for
(
size_t
i
=
0
;
i
<
cinfo
.
output_height
;
i
++
)
{
rows
[
i
]
=
samples
+
(
i
*
cinfo
.
output_width
*
cinfo
.
output_components
);
}
...
...
@@ -41,7 +46,7 @@ void JpegDecoder::operate()
emit
finished
(
samples
,
jpeg
->
x
,
jpeg
->
y
,
jpeg
->
width
,
jpeg
->
height
);
delete
[]
jpeg
->
data
;
delete
jpeg
;
delete
rows
;
jpeg_destroy_decompress
(
&
cinfo
);
delete
[]
rows
;
}
jpeg_destroy_decompress
(
&
cinfo
);
}
main.cpp
View file @
b53b0657
...
...
@@ -16,7 +16,7 @@ int main(int argc, char *argv[])
format
.
setMajorVersion
(
2
);
format
.
setMinorVersion
(
0
);
format
.
setRenderableType
(
QSurfaceFormat
::
OpenGLES
);
format
.
setSwapBehavior
(
QSurfaceFormat
::
Doub
leBuffer
);
format
.
setSwapBehavior
(
QSurfaceFormat
::
Sing
leBuffer
);
format
.
setSwapInterval
(
0
);
QSurfaceFormat
::
setDefaultFormat
(
format
);
QGuiApplication
::
setAttribute
(
Qt
::
AA_UseOpenGLES
,
true
);
...
...
@@ -28,4 +28,3 @@ int main(int argc, char *argv[])
return
app
.
exec
();
}
main.qml
View file @
b53b0657
...
...
@@ -4,8 +4,8 @@ import thinclient 1.3
ApplicationWindow
{
visible
:
true
width
:
vnc
.
width
height
:
tab
.
height
+
vnc
.
height
width
:
800
height
:
600
id
:
window
header
:
TabBar
{
...
...
@@ -30,5 +30,6 @@ ApplicationWindow {
port
:
10495
width
:
1280
height
:
720
transform
:
Scale
{
xScale
:
window
.
width
/
vnc
.
width
;
yScale
:
(
window
.
height
-
tab
.
height
)
/
vnc
.
height
}
}
}
qvnc.cpp
View file @
b53b0657
...
...
@@ -164,7 +164,7 @@ void QVnc::wheelEvent(QWheelEvent *event)
void
QVnc
::
mouseMoveEvent
(
QMouseEvent
*
event
)
{
// Filter mouse move events, we don't need 100+ of them in a second
if
((
event
->
timestamp
()
-
m_lastMouseEvent
)
>
33
)
{
//
if((event->timestamp() - m_lastMouseEvent) > 33) {
Qt
::
MouseButtons
buttons
=
event
->
buttons
();
m_lastMouseEvent
=
event
->
timestamp
();
if
(
m_dispatcher
->
mouseEvent
(
event
->
x
(),
...
...
@@ -177,7 +177,7 @@ void QVnc::mouseMoveEvent(QMouseEvent *event)
event
->
accept
();
else
event
->
ignore
();
}
//
}
}
void
QVnc
::
hoverMoveEvent
(
QHoverEvent
*
event
)
...
...
qvnc.h
View file @
b53b0657
#ifndef VNC_H
#define VNC_H
#define DECODER_COUNT
8
#define DECODER_COUNT
256
#include <QQuickWindow>
#include <QObject>
...
...
uploader.cpp
View file @
b53b0657
This diff is collapsed.
Click to expand it.
uploader.h
View file @
b53b0657
...
...
@@ -40,7 +40,7 @@ struct Indices
{
// 4 corner/rectangle and the first and last one duplicated except for the first and last rectangle
unsigned
short
i
[(
VERTEX_BUFFER
/
4
)
*
6
-
2
];
constexpr
Indices
()
:
i
()
Indices
()
:
i
()
{
i
[
0
]
=
0
;
auto
index
=
1
;
...
...
@@ -51,7 +51,7 @@ struct Indices
}
}
};
const
expr
Indices
ind
;
const
struct
Indices
ind
;
struct
Vertex
{
...
...
@@ -97,7 +97,7 @@ public:
void
gotCopy
(
const
GLushort
src_x
,
const
GLushort
src_y
,
const
GLushort
width
,
const
GLushort
height
,
const
GLushort
dest_x
,
const
GLushort
dest_y
);
void
gotBitmap
(
const
QImage
&
image
,
void
gotBitmap
(
const
unsigned
char
*
image
,
const
GLushort
x
,
const
GLushort
y
,
const
GLushort
width
,
const
GLushort
height
);
void
gotJpeg
();
...
...
vncrenderer.cpp
View file @
b53b0657
...
...
@@ -25,9 +25,9 @@ VncRenderer::VncRenderer(QQuickWindow *window,
void
VncRenderer
::
render
()
{
/*
static QTime frameTime;
static
QTime
frameTime
;
qDebug
()
<<
qRound
(
1000.0
/
frameTime
.
elapsed
())
<<
*
m_drawCount
;
frameTime.restart();
*/
frameTime
.
restart
();
if
(
*
m_drawCount
>
0
)
{
m_program
.
bind
();
...
...
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