UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WebBrowserTextureSample.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "CoreGlobals.h"
7#include "Containers/Queue.h"
8#include "Math/IntPoint.h"
9#include "Math/Range.h"
10#include "MediaObjectPool.h"
11#include "RHI.h"
12#include "RHIUtilities.h"
14
19 : public IMediaPoolable
20{
21public:
22
25 : Buffer(nullptr)
26 , BufferSize(0)
27 , Dim(FIntPoint::ZeroValue)
28 , ScaleRotation(FLinearColor(1.0f, 0.0f, 0.0f, 1.0f))
29 , Offset(FLinearColor(0.0f, 0.0f, 0.0f, 0.0f))
30 { }
31
34 {
35 if (BufferSize > 0)
36 {
37 FMemory::Free(Buffer);
38 }
39 }
40
41public:
42
49 {
50 return Buffer;
51 }
52
61 {
62 if (InDim.GetMin() <= 0)
63 {
64 return false;
65 }
66
67 Dim = InDim;
68
69 return true;
70 }
71
79 void InitializeBuffer(void* InBuffer, bool Copy)
80 {
81 if (Copy)
82 {
83 SIZE_T RequiredBufferSize = Dim.X * Dim.Y * sizeof(int32);
84 if (BufferSize < RequiredBufferSize)
85 {
86 if (BufferSize == 0)
87 {
88 Buffer = FMemory::Malloc(RequiredBufferSize);
89 }
90 else
91 {
92 Buffer = FMemory::Realloc(Buffer, RequiredBufferSize);
93 }
94
95 BufferSize = RequiredBufferSize;
96 }
97
99 }
100 else
101 {
102 if (BufferSize > 0)
103 {
104 FMemory::Free(Buffer);
105 BufferSize = 0;
106 }
107
108 Buffer = InBuffer;
109 }
110 }
111
119 {
120 SIZE_T RequiredBufferSize = Dim.X * Dim.Y * sizeof(int32);
121 if (BufferSize < RequiredBufferSize)
122 {
123 if (BufferSize == 0)
124 {
125 Buffer = FMemory::Malloc(RequiredBufferSize);
126 }
127 else
128 {
129 Buffer = FMemory::Realloc(Buffer, RequiredBufferSize);
130 }
131
132 BufferSize = RequiredBufferSize;
133 }
134 return BufferSize;
135 }
136
146 {
148
149 if (Texture.IsValid() && (Texture->GetSizeXY() == Dim))
150 {
151 return Texture;
152 }
153
154 const FRHITextureCreateDesc Desc =
155 FRHITextureCreateDesc::Create2D(TEXT("FWebBrowserTextureSample"))
156 .SetExtent(Dim)
160
161 Texture = RHICmdList.CreateTexture(Desc);
162
163 return Texture;
164 }
165
173 {
175 Offset = FLinearColor(InOffset.X, InOffset.Y, InOffset.Z, InOffset.W);
176 }
177
178public:
179
180 //~ IMediaTextureSample interface
181
182 virtual const void* GetBuffer()
183 {
184 return Buffer;
185 }
186
187 virtual FIntPoint GetDim() const
188 {
189 return Dim;
190 }
191
192 virtual uint32 GetStride() const
193 {
194 return Dim.X * sizeof(int32);
195 }
196
197#if WITH_ENGINE
198
199 virtual FRHITexture* GetTexture() const
200 {
201 return Texture.GetReference();
202 }
203
204#endif //WITH_ENGINE
205
207 {
208 return ScaleRotation;
209 }
210
211 virtual FLinearColor GetOffset() const
212 {
213 return Offset;
214 }
215
216private:
217
219 void* Buffer;
220
222 SIZE_T BufferSize;
223
225 FIntPoint Dim;
226
228 FLinearColor ScaleRotation;
229
231 FLinearColor Offset;
232
233#if WITH_ENGINE
234
237
238#endif //WITH_ENGINE
239};
240
241
243{
244public:
245
248 : NumSamples(0)
249 , PendingFlushes(0)
250 { }
251
254
255public:
256
263 int32 Num() const
264 {
265 return NumSamples;
266 }
267
268public:
269
270 //~ TMediaSampleSource interface (to be called only from consumer thread)
271
273 {
275
277
278 if (!Samples.Peek(Sample))
279 {
280 return false; // empty queue
281 }
282
283 if (!Sample.IsValid())
284 {
285 return false; // pending flush
286 }
287
288 Samples.Pop();
289
290 FPlatformAtomics::InterlockedDecrement(&NumSamples);
291 check(NumSamples >= 0);
292
293 OutSample = Sample;
294
295 return true;
296 }
297
299 {
301
303
304 if (!Samples.Peek(Sample))
305 {
306 return false; // empty queue
307 }
308
309 if (!Sample.IsValid())
310 {
311 return false; // pending flush
312 }
313
314 OutSample = Sample;
315
316 return true;
317 }
318
319 virtual bool Pop()
320 {
322
323 if (!Samples.Peek(Sample))
324 {
325 return false; // empty queue
326 }
327
328 if (!Sample.IsValid())
329 {
330 return false; // pending flush
331 }
332
333 Samples.Pop();
334
335 FPlatformAtomics::InterlockedDecrement(&NumSamples);
336 check(NumSamples >= 0);
337
338 return true;
339 }
340
341public:
342
343 //~ TMediaSampleSink interface (to be called only from producer thread)
344
346 {
347 if (Sample.IsValid())
348 {
349 FPlatformAtomics::InterlockedIncrement(&NumSamples);
350 }
351
352 if (!Samples.Enqueue(Sample))
353 {
354 if (Sample.IsValid())
355 {
356 FPlatformAtomics::InterlockedDecrement(&NumSamples);
357 }
358
359 return false;
360 }
361
362 return true;
363 }
364
365 virtual void RequestFlush()
366 {
367 Samples.Enqueue(nullptr); // insert flush marker
368 FPlatformAtomics::InterlockedIncrement(&PendingFlushes);
369 }
370
371protected:
372
375 {
377
378 while ((PendingFlushes > 0) && Samples.Dequeue(Sample))
379 {
380 if (Sample.IsValid())
381 {
382 FPlatformAtomics::InterlockedDecrement(&NumSamples);
383 check(NumSamples >= 0);
384 }
385 else
386 {
387 FPlatformAtomics::InterlockedDecrement(&PendingFlushes);
388 }
389 }
390 }
391
392private:
393
395 int32 NumSamples;
396
398 int32 PendingFlushes;
399
402};
403
404
406class FWebBrowserTextureSamplePool : public TMediaObjectPool<FWebBrowserTextureSample> { };
407
#define check(expr)
Definition AssertionMacros.h:314
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ PF_B8G8R8A8
Definition PixelFormat.h:19
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHICommandList.h:455
FTextureRHIRef CreateTexture(const FRHITextureCreateDesc &CreateDesc)
Definition RHICommandList.h:941
Definition RHIResources.h:2153
Definition WebBrowserTextureSample.h:406
Definition WebBrowserTextureSample.h:243
virtual void RequestFlush()
Definition WebBrowserTextureSample.h:365
virtual bool Dequeue(TSharedPtr< FWebBrowserTextureSample, ESPMode::ThreadSafe > &OutSample)
Definition WebBrowserTextureSample.h:272
void DoPendingFlushes()
Definition WebBrowserTextureSample.h:374
virtual bool Peek(TSharedPtr< FWebBrowserTextureSample, ESPMode::ThreadSafe > &OutSample)
Definition WebBrowserTextureSample.h:298
int32 Num() const
Definition WebBrowserTextureSample.h:263
virtual bool Enqueue(const TSharedPtr< FWebBrowserTextureSample, ESPMode::ThreadSafe > &Sample)
Definition WebBrowserTextureSample.h:345
FWebBrowserTextureSampleQueue()
Definition WebBrowserTextureSample.h:247
virtual ~FWebBrowserTextureSampleQueue()
Definition WebBrowserTextureSample.h:253
virtual bool Pop()
Definition WebBrowserTextureSample.h:319
Definition WebBrowserTextureSample.h:20
virtual const void * GetBuffer()
Definition WebBrowserTextureSample.h:182
virtual FIntPoint GetDim() const
Definition WebBrowserTextureSample.h:187
virtual ~FWebBrowserTextureSample()
Definition WebBrowserTextureSample.h:33
void SetScaleRotationOffset(FVector4 &InScaleRotation, FVector4 &InOffset)
Definition WebBrowserTextureSample.h:172
virtual uint32 GetStride() const
Definition WebBrowserTextureSample.h:192
virtual FLinearColor GetScaleRotation() const
Definition WebBrowserTextureSample.h:206
FWebBrowserTextureSample()
Definition WebBrowserTextureSample.h:24
FRHITexture * InitializeTexture(FRHICommandListBase &RHICmdList)
Definition WebBrowserTextureSample.h:145
void InitializeBuffer(void *InBuffer, bool Copy)
Definition WebBrowserTextureSample.h:79
void * GetMutableBuffer()
Definition WebBrowserTextureSample.h:48
virtual FLinearColor GetOffset() const
Definition WebBrowserTextureSample.h:211
bool Initialize(const FIntPoint &InDim)
Definition WebBrowserTextureSample.h:60
int32 InitializeBufferForCopy()
Definition WebBrowserTextureSample.h:118
Definition MediaObjectPool.h:16
Definition MediaObjectPool.h:70
Definition Queue.h:48
bool Pop()
Definition Queue.h:261
bool Peek(FElementType &OutItem) const
Definition Queue.h:219
bool Enqueue(const FElementType &Item)
Definition Queue.h:123
bool Dequeue(FElementType &OutItem)
Definition Queue.h:80
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition Color.h:48
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition RHIResources.h:1938
FRHITextureCreateDesc & SetFlags(ETextureCreateFlags InFlags)
Definition RHIResources.h:2063
FRHITextureCreateDesc & SetExtent(const FIntPoint &InExtent)
Definition RHIResources.h:2067
FRHITextureCreateDesc & SetFormat(EPixelFormat InFormat)
Definition RHIResources.h:2075
FRHITextureCreateDesc & SetInitialState(ERHIAccess InInitialState)
Definition RHIResources.h:2078
static FRHITextureCreateDesc Create2D(const TCHAR *InDebugName)
Definition RHIResources.h:1944
Definition IntPoint.h:25
IntType Y
Definition IntPoint.h:37
IntType X
Definition IntPoint.h:34
T Y
Definition Vector4.h:46
T Z
Definition Vector4.h:49
T W
Definition Vector4.h:52
T X
Definition Vector4.h:43