Skip to content

Commit bcf3594

Browse files
committed
Add support for using cached python package data for GPUOpen since it's mostly static now.
1 parent 7390871 commit bcf3594

3 files changed

Lines changed: 83 additions & 9 deletions

File tree

flask/gpuopen/MaterialXGPUOpenApp.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import argparse
66
import sys
77
from flask import Flask, render_template
8+
import json
89
from flask_socketio import SocketIO, emit
910
from materialxMaterials import GPUOpenLoader as gpuo
1011
have_mx = False
@@ -121,8 +122,16 @@ def handle_download_materialx(self, data):
121122
self.loader.getRenders()
122123
self.material_names = self.loader.getMaterialNames()
123124

124-
# Convert materials to JSON and get the count
125-
materials_list = self.loader.getMaterialsAsJsonString()
125+
# Convert materials to JSON and add preview URLs
126+
materials_list = []
127+
for mat_json in self.loader.getMaterialsAsJsonString():
128+
mat_obj = json.loads(mat_json)
129+
# Add preview URL for each result
130+
for result in mat_obj.get('results', []):
131+
title = result.get('title')
132+
result['url'] = self.loader.getMaterialPreviewURL(title)
133+
materials_list.append(json.dumps(mat_obj))
134+
# Sort list by title
126135
self.material_count = len(self.material_names)
127136

128137
# Emit a status message

flask/gpuopen/static/js/MaterialXGPUOpenClient.js

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,49 @@ export class MaterialX_GPUOpen_Client extends WebSocketClient
8787
if (firstMaterial) {
8888
this.populateForm(firstMaterial);
8989
}
90-
}
90+
91+
// Render preview images in gallery using preview URL from backend
92+
const gallery = document.getElementById('material_gallery');
93+
gallery.innerHTML = '';
94+
for (const element of this.materialsList) {
95+
let materials = JSON.parse(element).results;
96+
// Sort by title
97+
materials.sort((a, b) => a.title.localeCompare(b.title));
98+
if (materials) {
99+
for (const material of materials)
100+
{
101+
if (material.url) {
102+
const col = document.createElement('div');
103+
col.className = 'col-md-3 col-lg-2 mb-4';
104+
105+
col.innerHTML = `
106+
<div class="card material-card" data-material-id="${material.id}">
107+
<img src="${material.thumb_url}" class="card-img-top material-img" alt="${material.name}" onerror="this.src=${svgDataUrl}">
108+
<div class="card-body">
109+
<div class="card-title">${material.title}</div>
110+
</div>
111+
</div>
112+
`;
113+
114+
//col.querySelector('.card').addEventListener('click', () => showMaterialDetails(material));
115+
//materialsContainer.appendChild(col);
116+
117+
/*const col = document.createElement('div');
118+
col.className = 'col-auto mb-2';
119+
col.innerHTML = `
120+
<div class="card" style="width: 8rem;">
121+
<img src="${result.url}" class="card-img-top" alt="Preview">
122+
<div class="card-body p-2">
123+
<div class="card-title x-small">${result.title || 'Material'}</div>
124+
</div>
125+
</div>
126+
`;*/
127+
gallery.appendChild(col);
128+
}
129+
}
130+
}
131+
}
132+
}
91133
}
92134

93135
handleMaterialXExtract(data)

flask/gpuopen/templates/MaterialXGPUOpenApp.html

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,21 @@
3030
border: solid thin lightskyblue;
3131
height: 50em;
3232
}
33+
.material-card {
34+
transition: transform 0.2s;
35+
cursor: pointer;
36+
height: 100%;
37+
}
38+
39+
.material-card:hover {
40+
transform: scale(1.03);
41+
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
42+
}
43+
44+
.material-img {
45+
height: 180px;
46+
object-fit: cover;
47+
}
3348
</style>
3449
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
3550
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"></script>
@@ -52,6 +67,14 @@ <h2 id="title">GPUOpen MaterialX Inspector</h2>
5267
</div>
5368
</div>
5469

70+
<!-- Gallery area for preview images -->
71+
<div class="container mt-3 p-2 border border-prinary rounded-3" id="gallery_area" style="max-height: 500px; overflow-y: auto;">
72+
<h5>Material Gallery</h5>
73+
<div class="row" id="material_gallery">
74+
<!-- Preview images will be inserted here -->
75+
</div>
76+
</div>
77+
5578
<div class="container p-2 border border-primary rounded-3">
5679
<h4 class="mb-4">Materials List</h4>
5780
<select class="form-select mb-3" id="materialSelect">
@@ -163,14 +186,14 @@ <h4 class="mb-4">Material Details</h4>
163186
<script src="https://cdn.jsdelivr.net/npm/jszip@3.7.1/dist/jszip.min.js"></script>
164187
<script type="module">
165188

166-
import { MaterialX_GPUOpen_Client } from "{{ url_for('static', filename='js/MaterialXGPUOpenClient.js') }}";
189+
import { MaterialX_GPUOpen_Client } from "{{ url_for('static', filename='js/MaterialXGPUOpenClient.js') }}";
167190

168-
document.addEventListener("DOMContentLoaded", () => {
169-
document.body.setAttribute('data-bs-theme', 'dark');
191+
document.addEventListener("DOMContentLoaded", () => {
192+
document.body.setAttribute('data-bs-theme', 'dark');
170193

171-
// Instantiate the client
172-
const client = new MaterialX_GPUOpen_Client("", "");
173-
});
194+
// Instantiate the client
195+
const client = new MaterialX_GPUOpen_Client("", "");
196+
});
174197
</script>
175198
</body>
176199

0 commit comments

Comments
 (0)