Вот решение, которое я нашел. Это выглядит не очень элегантно:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<% pageContext.setAttribute("newLineChar", "\n"); %>
${fn:replace(item.comments, newLineChar, "; ")}
Они не используются для той же цели.
glBindBuffer
используется для привязки буфера к определенной цели, так что все операции, которые изменяют эту цель, впоследствии сопоставляются с этим буфером.
glBindBufferBase
используется для совершенно другой цели, он используется для привязки буфера к конкретной точке привязки в индексированном массиве (когда данные не предполагается напрямую изменять, а использовать). Хотя это может показаться запутанным, это действительно легко увидеть. Предположим, что вы хотите передать унифицированный блок в свой шейдер, тогда у вас есть таблица, которая отображает именованные буферы на конкретные индексы в массиве, которые затем отображаются на привязки в шейдере, как показано на следующем рисунке:
, поэтому glBindBufferBase
создает стрелки справа, в которых вы указываете индекс, а glBindBuffer
просто привязывает буфер к определенной цели. [1112 ]
Затем вы можете использовать glGetUniformBlockIndex
для получения правильного индекса в шейдере, который затем связывается с точкой привязки (стрелки влево) через glUniformBlockBinding
.