Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qopenglprogrambinarycache_p.h
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#
ifndef
QOPENGLPROGRAMBINARYCACHE_P_H
5
#
define
QOPENGLPROGRAMBINARYCACHE_P_H
6
7
//
8
// W A R N I N G
9
// -------------
10
//
11
// This file is not part of the Qt API. It exists purely as an
12
// implementation detail. This header file may change from version to
13
// version without notice, or even be removed.
14
//
15
// We mean it.
16
//
17
18
#
include
<
QtGui
/
qtguiglobal
.
h
>
19
#
include
<
QtCore
/
qcache
.
h
>
20
#
include
<
QtCore
/
qmutex
.
h
>
21
#
include
<
QtCore
/
QLoggingCategory
>
22
#
include
<
QtGui
/
private
/
qopenglcontext_p
.
h
>
23
#
include
<
rhi
/
qshader
.
h
>
24
25
QT_BEGIN_NAMESPACE
26
27
// These classes are also used by the OpenGL backend of QRhi. They must
28
// therefore stay independent from QOpenGLShader(Program). Must rely only on
29
// QOpenGLContext/Functions.
30
31
QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY(lcOpenGLProgramDiskCache, Q_GUI_EXPORT)
32
33
class
Q_GUI_EXPORT QOpenGLProgramBinaryCache
34
{
35
public
:
36
struct
Q_GUI_EXPORT ShaderDesc {
37
ShaderDesc() { }
38
ShaderDesc(QShader::Stage stage,
const
QByteArray &source = QByteArray())
39
: stage(stage), source(source)
40
{ }
41
QShader::Stage stage;
42
QByteArray source;
43
};
44
struct
Q_GUI_EXPORT ProgramDesc {
45
QList<ShaderDesc> shaders;
46
QByteArray cacheKey()
const
;
47
};
48
49
QOpenGLProgramBinaryCache();
50
51
bool
load(
const
QByteArray &cacheKey, uint programId);
52
void
save(
const
QByteArray &cacheKey, uint programId);
53
54
private
:
55
QString cacheFileName(
const
QByteArray &cacheKey)
const
;
56
bool
verifyHeader(
const
QByteArray &buf)
const
;
57
bool
setProgramBinary(uint programId, uint blobFormat,
const
void
*p, uint blobSize);
58
59
QString m_cacheDir;
60
bool
m_cacheWritable;
61
struct
MemCacheEntry {
62
MemCacheEntry(
const
void
*p, qsizetype size, uint format)
63
: blob(
reinterpret_cast
<
const
char
*>(p), size),
64
format(format)
65
{ }
66
QByteArray blob;
67
uint format;
68
};
69
QCache<QByteArray, MemCacheEntry> m_memCache;
70
#
if
QT_CONFIG
(
opengles2
)
71
void
(QOPENGLF_APIENTRYP programBinaryOES)(GLuint program, GLenum binaryFormat,
const
GLvoid *binary, GLsizei length);
72
void
(QOPENGLF_APIENTRYP getProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
73
void
initializeProgramBinaryOES(QOpenGLContext *context);
74
bool
m_programBinaryOESInitialized =
false
;
75
#
endif
76
QMutex m_mutex;
77
};
78
79
// While unlikely, one application can in theory use contexts with different versions
80
// or profiles. Therefore any version- or extension-specific checks must be done on a
81
// per-context basis, not just once per process. QOpenGLSharedResource enables this,
82
// although it's once-per-sharing-context-group, not per-context. Still, this should
83
// be good enough in practice.
84
class
Q_GUI_EXPORT
QOpenGLProgramBinarySupportCheck
:
public
QOpenGLSharedResource
85
{
86
public
:
87
QOpenGLProgramBinarySupportCheck(QOpenGLContext *context);
88
void
invalidateResource() override { }
89
void
freeResource(QOpenGLContext *) override { }
90
91
bool
isSupported()
const
{
return
m_supported; }
92
93
private
:
94
bool
m_supported;
95
};
96
97
class
QOpenGLProgramBinarySupportCheckWrapper
98
{
99
public
:
100
QOpenGLProgramBinarySupportCheck
*
get
(QOpenGLContext *context)
101
{
102
return
m_resource.value<QOpenGLProgramBinarySupportCheck>(context);
103
}
104
105
private
:
106
QOpenGLMultiGroupSharedResource m_resource;
107
};
108
109
QT_END_NAMESPACE
110
111
#
endif
DeferredFileRemove
Definition
qopenglprogrambinarycache.cpp:265
DeferredFileRemove::DeferredFileRemove
DeferredFileRemove(const QString &fn)
Definition
qopenglprogrambinarycache.cpp:267
DeferredFileRemove::active
bool active
Definition
qopenglprogrambinarycache.cpp:283
DeferredFileRemove::fn
QString fn
Definition
qopenglprogrambinarycache.cpp:282
DeferredFileRemove::setActive
void setActive()
Definition
qopenglprogrambinarycache.cpp:277
DeferredFileRemove::~DeferredFileRemove
~DeferredFileRemove()
Definition
qopenglprogrambinarycache.cpp:272
QOpenGLProgramBinarySupportCheckWrapper
Definition
qopenglprogrambinarycache_p.h:98
QOpenGLProgramBinarySupportCheckWrapper::get
QOpenGLProgramBinarySupportCheck * get(QOpenGLContext *context)
Definition
qopenglprogrambinarycache_p.h:100
QOpenGLProgramBinarySupportCheck
Definition
qopenglprogrambinarycache_p.h:85
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
Q_LOGGING_CATEGORY
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
GL_CONTEXT_LOST
#define GL_CONTEXT_LOST
Definition
qopengl.cpp:30
GL_NUM_PROGRAM_BINARY_FORMATS
#define GL_NUM_PROGRAM_BINARY_FORMATS
Definition
qopenglext.h:1871
GL_PROGRAM_BINARY_LENGTH
#define GL_PROGRAM_BINARY_LENGTH
Definition
qopenglext.h:1870
qt_ensureWritableDir
static bool qt_ensureWritableDir(const QString &name)
Definition
qopenglprogrambinarycache.cpp:79
BASE_HEADER_SIZE
#define BASE_HEADER_SIZE
Definition
qopenglprogrambinarycache.cpp:102
BINSHADER_VERSION
const quint32 BINSHADER_VERSION
Definition
qopenglprogrambinarycache.cpp:40
writeFile
static bool writeFile(const QString &filename, const QByteArray &data)
Definition
qopenglprogrambinarycache.cpp:386
BINSHADER_QTVERSION
const quint32 BINSHADER_QTVERSION
Definition
qopenglprogrambinarycache.cpp:41
PADDING_SIZE
#define PADDING_SIZE(fullHeaderSize)
Definition
qopenglprogrambinarycache.cpp:104
writeStr
static void writeStr(uchar **p, const QByteArray &str)
Definition
qopenglprogrambinarycache.cpp:379
BINSHADER_MAGIC
const quint32 BINSHADER_MAGIC
Definition
qopenglprogrambinarycache.cpp:39
writeUInt
static void writeUInt(uchar **p, quint32 value)
Definition
qopenglprogrambinarycache.cpp:373
FULL_HEADER_SIZE
#define FULL_HEADER_SIZE(stringsSize)
Definition
qopenglprogrambinarycache.cpp:103
qtbase
src
gui
opengl
qopenglprogrambinarycache_p.h
Generated on
for Qt by
1.18.0